char name[40];
printf("enter your name:");
scanf("%39s",name);
- 如何将数字填入数字域(numeric field)?
int age;
printf("enter your age: ");
scanf("%i",&age);
char first_name[20];
char last_name[20];
printf("Enter first and last name:");
scanf("%19s %19s", first_name,last_name);//此处录入格式有空格,所以输入内容时,两段信息之间也应当有空格
printf("First: %s Last:%s \n",first_name,last_name);
- 直接在scanf()使用%s录入数据,若录入的数据量超过分配的存储空间,程序会崩溃。
- fgets()可替代scanf()用于录入文本数据,它同样使用了指针,但是不同之处在于它有最大长度。
char food[5];
printf("Enter favorite food:");
fgets(food,sizeof(food),stdin);//food指针,sizeof(food)计算字符串的最大限度包含\0(不必享scanf()那样-1),stdin数据来自键盘
- 如果传递一个数组给fgets(),使用sizeof不会出问题,但是如果传递一个指针给fgets(),你应当输入明确的长度,而不是使用sizeof
- fgets()来自gets(),但是后者没有限制,所以不推荐使用
- 比较:scanf()与fgets()
- 两者有限制,前者的限制是可选的,因此有可能会忘记,而后者是强制性的
- 前者支持输入多种结构数据,多种域(multiple fields),而后者只支持字符串,且只有缓冲区
- 前者使用%s读取字符串时遇到空格就会停止,因此要么多次输入数据要么使用其他的表达符号,后者可以支持完整输入包括空格
- 总结:向多个域中输入结构数据,选用scanf(),输入单一无结构字符串,使用fgets()