- 当读入的字符串中有空格时,一般会采取gets()函数
gets()函数遇到换行才会停止读入
但是在PAT刷题的过程中,发现PAT不能使用gets()函数
同等替代方法有两个:
- 可以将gets()替换成fgets()函数,具体代码如下
替换前
gets(str);
替换后
char str[200];
// 200代表最大的字符数,stdin从标准输入(键盘)中获取
fgets (str, 200, stdin);
// fgets会将回车也输入到数组中,可以使用下面代码进行去除多余回车
while(str[i]!='\n')
i++;
str[i]='\0'
fgets会将回车也输入到数组中
- 使用while与scanf函数进行
#include"stdio.h"
int main(){
char c;
while(~scanf("%c",&c)) // 也可为while(scanf("%c",&c))
{
if (c=='\n'){
break;
}
printf("%c ",c);
}
}
- scanf会返回成功输入的值的个数,而最后输入的回车被捕获后进行判断来退出while
- 上面代码的
while(~scanf("%c",&c))
也可换成while(scanf("%c",&c))
,~
表示按位取反
- 对
while(~scanf("%c",&c))
的解释:
因为scanf返回的是成功输入的个数,只有-1取反后才为0,然后退出while
而scanf取值-1代表着获取值失败(比如在输入时按下ctrl+z)
while(~scanf("%c",&c))
是为了考虑到会有这么获取值失败的情况
但正常情况下也不会想着让scanf获取值失败,而是想的时让scanf获取一行的值,并在while内部判断从而退出while
所以一般情况下就 也可以 使用while(scanf("%c",&c))