对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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值