fgets简单使用方法:fgets(接受的变量,长度,stdin),长度如果是20,那么只能输入19个。返回值是这个接收到的内容的指针。stdin表示从键盘接收内容。
strchr简单使用方法:strchr(字符串,字符),返回这个字符第一次出现在这个字符串位置的指针,如果不在其中,就返回一个空指针。
数组定义后,再给数组赋值,要使用strcpy。使用方法strcpy(数组名,内容);
数组输入字符串后,最后一个因为按了回车表示输入完毕,所以数组的最后一个字符会有一个'\n'。如果printf时用这个数组,然后后面加上其余字符,会自动换行,影响美观,所以需要使用strchr来找出数组中的'\n'进行替换,确保在printf输出时不会出现多余的换行。
#include <stdio.h>
#include <string.h>
#define M 41
#define X 31
char * s_gets(char * st,int n);
struct book{
char title[M];
char author[X];
float value;
};
int main(){
struct book library;
printf("请输入书名:\n");
s_gets(library.title,M);
printf("输入新书的作者:\n");
s_gets(library.author,X);
printf("请输入它的价格:");
scanf("%f",&library.value);
printf("%s by %s: $%.2f\n",library.title,library.author,library.value);
printf("%s:\"%s\"($%.2f)\n",library.author,library.title,library.value);
printf("Done.\n");
return 0;
}
char * s_gets(char * st,int n){
char * ret_val;
char * find;
ret_val=fgets(st,n,stdin);
if(ret_val){//替换掉数组中的换行符,确保printf输出的时候不会自动换行
find = strchr(st,'\n');
if(find){
*find = '\0';
}else{
while(getchar() != '\n')
continue;
}
}
return ret_val;
}