ch为char类型的数组
gets()和scanf()的区别在于输入的字符串是否中间有空格:
对于前者,只有遇到"\n"时才停止输入,而对于后者,出现"\n"或空格都停止输入。
gets(ch):
#include <cstdio>
int main()
{
char ch[100];
gets(ch);
printf("%s\n",ch);
return 0;
}
运行结果:
scanf("%s",ch):
#include <cstdio>
int main()
{
char ch[100];
while (1){
scanf("%s",ch);
printf("%s",ch);
}
return 0;
}
运行结果:
补充:
scanf("%s",ch)
%s格式符表示用来输入出一个字符串,而字符串是以数组的形式的存储的。c语言中数组名代表该数组的起始地址。此处的ch为char类型的数组,因此不需要再加&
while(~scanf("%s",str)){
}
scanf()函数的返回值是成功读取变量的个数,这里可能返回是1或0,当返回0时,~0为真,则继续循环,所以该循环的意思是,直到成功读取一个字符串时,才结束循环。
补充2:
scanf("%[^\n]",ch)
表示读入一行字符串
^表示“非”
[^\n]表示读入换行字符就结束读入
补充3:
getchar()函数
gerchar()函数每次从缓冲区中得到一个字符
注:回车也算一个字符
当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。即回车是用户输入结束的标志,同时也会将回车字符也放在缓冲区中,此时getchar才开始从键盘缓冲区中读取数据,包括回车符。
另外,对与何时使用getchar()获取换行符,可以参照我的这篇文章:
对于何时使用getchar()获取换行符的总结
补充4:
gets()函数
gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
用gets()函数来读取,可能会超出存储数组的范围。
此外,关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。