C语言中getchar()函数的作用及缺失影响
C语言中getchar()函数的作用及缺失影响
在以下代码中,getchar()函数的作用是读取输入的换行符,以防止换行符被接下来的gets()函数误读为输入字符串的一部分。
#include<stdio.h>
#include<string.h>
int main()
{
int n=0;
scanf("%d",&n);
getchar();
char str[80];
for(int i=0;i<n;i++)
{
int ret=-1;
gets(str);
int lenth=0;
lenth=strlen(str);
if(str[lenth-1]=='?')
{
for(int j=0;j<lenth-2;j++)
{
if(str[j]=='P'&&str[j+1]=='T'&&str[j+2]=='A')
{ret=1;break;}
}
}
else {printf("enen\n");ret=0;}
if(ret==1) printf("Yes!\n");
else if(ret==-1) printf("No.\n");
}
return 0;
}
如果缺少了getchar()函数, 那么在接下来的gets()函数中,换行符会被误读为输入字符串的一部分。这将导致输入的字符串不符合预期,可能会影响程序的正确性。
例如,当用户输入一个数字后按回车键,scanf()函数会读取数字,但换行符会留在输入缓冲区中。如果接下来调用gets()函数,它会直接读取缓冲区中的换行符,导致实际输入的字符串为空字符串,程序逻辑可能出现错误。
总结: getchar()函数在scanf()之后使用可以清空输入缓冲区中残留的换行符,保证后续gets()函数能够正确读取用户输入的字符串。
建议: 为了避免类似问题,建议使用更安全的输入函数 fgets() 来代替 gets() 函数。fgets() 函数可以指定读取的最大字符数,并不会读取换行符,从而避免了潜在的安全风险。
代码示例:
#include<stdio.h>
#include<string.h>
int main()
{
int n=0;
scanf("%d",&n);
getchar(); // 清空输入缓冲区的换行符
char str[80];
for(int i=0;i<n;i++)
{
int ret=-1;
fgets(str, 80, stdin); // 使用fgets()安全读取字符串
int lenth=0;
lenth=strlen(str);
if(str[lenth-1]=='?')
{
for(int j=0;j<lenth-2;j++)
{
if(str[j]=='P'&&str[j+1]=='T'&&str[j+2]=='A')
{ret=1;break;}
}
}
else {printf("enen\n");ret=0;}
if(ret==1) printf("Yes!\n");
else if(ret==-1) printf("No.\n");
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/pq43 著作权归作者所有。请勿转载和采集!