对PAT中不能使用gets函数的解决方法 与 while(~scanf(“%c“,&c))

  • 当读入的字符串中有空格时,一般会采取gets()函数
    gets()函数遇到换行才会停止读入

但是在PAT刷题的过程中,发现PAT不能使用gets()函数
同等替代方法有两个:

  1. 可以将gets()替换成fgets()函数,具体代码如下
替换前
gets(str);
替换后
char str[200];
// 200代表最大的字符数,stdin从标准输入(键盘)中获取
fgets (str, 200, stdin);  

// fgets会将回车也输入到数组中,可以使用下面代码进行去除多余回车
while(str[i]!='\n') 
    i++;
str[i]='\0'

fgets会将回车也输入到数组中

  1. 使用while与scanf函数进行
#include"stdio.h"
int main(){
    
    
	char c;
	while(~scanf("%c",&c))  // 也可为while(scanf("%c",&c))
    {
    
    
    	if (c=='\n'){
    
    
    		break;
		}
        printf("%c ",c);
    }
} 
  1. scanf会返回成功输入的值的个数,而最后输入的回车被捕获后进行判断来退出while
  2. 上面代码的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))

猜你喜欢

转载自blog.csdn.net/qq_43779658/article/details/114853986