gpt4 book ai didi

c - 为什么我的程序不接受 fgets 部分的输入?欢迎任何其他建议

转载 作者:行者123 更新时间:2023-11-30 16:55:37 24 4
gpt4 key购买 nike

这是一个找出用户输入的字符串中元音、辅音、数字和空格数量的程序。编译后和运行期间 fgets 部分将被跳过。当我使用 scanf 时,程序工作正常,只是无法输入空格。问题出在哪里?请详细解释(我是新手:-P)和可能的补救措施。

#include<stdio.h>
#include<string.h>
void main()
{
/*Getting the input*/
printf("How much long is your string?: ");
int n;
scanf("%d",&n);
int i,j,vowels=0,consonants=0,spaces=0,digits=0,actual_length;
char k, str[n+1];
printf("Please enter your string: ");
fgets(str,n+1,stdin);
actual_length=strlen(str);
/*Actual computation*/
for(i=0;i<actual_length;i++)
{
if(str[i]=='A'||str[i]=='E'||str[i]=='I'||str[i]=='O'||str[i]=='U')
vowels++;
if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u')
vowels++;
if(str[i]==32)
spaces++;
for(j='0';j<='9';j++)
{
if(str[i]==j)
digits++;
}
for(k='A';k<='Z';k++)
{
if(k!='A'&&k!='E'&&k!='I'&&k!='O'&&k!='U')
{
if(str[i]==k)
consonants++;
}
}
for(k='a';k<='z';k++)
{
if(k!='a'&&k!='e'&&k!='i'&&k!='o'&&k!='u')
{
if(str[i]==k)
consonants++;
}
}
}
printf("The number of vowels are %d, number of consonants are %d, number of digits are %d and number of white spaces are %d\n",vowels,consonants,digits,spaces);
}

最佳答案

你的问题是当你说

scanf("%d",&n);

它读取数字,但不读取换行符。然后,当您调用 fgets 时,它会读取换行符,并认为这是一个空行,并且永远不会到达您想要读取的真正字符串(即从下一行开始)。

一般规则是,不要尝试在像这样的一个程序中混合调用 scanffgets - 你总是会陷入困境换行符,试图解开它们是一个巨大且毫无意义的麻烦。

解决该问题的一种方法是使用 fscanf 读取数字:

printf("How much long is your string?: ");
char tmp_n_str[15];
fgets(tmp_n_str, sizeof(tmp_n_str), stdin);
int n = atoi(tmp_n_str);

另一种方法(其他人可能会建议)是“刷新输入”以消除多余的换行符。您也可以这样做,这当然是一种流行的技术,尽管我个人不喜欢它,原因有很多,我不会在这里详细介绍。

关于c - 为什么我的程序不接受 fgets 部分的输入?欢迎任何其他建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40238245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com