C语言学习Day5

  • scanf() 函数:用于从键盘获取字符,例如
char name[40];
printf("enter your name:");
scanf("%39s",name);
  • 如何将数字填入数字域(numeric field)?
int age;
printf("enter your age: ");
scanf("%i",&age);
  • 同样也可以使用scanf()一次录入多条信息
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()
  1. 两者有限制,前者的限制是可选的,因此有可能会忘记,而后者是强制性的
  2. 前者支持输入多种结构数据,多种域(multiple fields),而后者只支持字符串,且只有缓冲区
  3. 前者使用%s读取字符串时遇到空格就会停止,因此要么多次输入数据要么使用其他的表达符号,后者可以支持完整输入包括空格
  4. 总结:向多个域中输入结构数据,选用scanf(),输入单一无结构字符串,使用fgets()

猜你喜欢

转载自blog.csdn.net/sinat_37012750/article/details/86083206