gpt4 book ai didi

c - 为什么第一个 gets() 函数不起作用?

转载 作者:行者123 更新时间:2023-11-30 17:06:20 25 4
gpt4 key购买 nike

这里第一个 gets() 不起作用。如果我再添加一个 gets() 函数,那么最后两个函数就会开始工作。我该如何修复它?

代码

#include<stdio.h>
#include<string.h>
int main(void)
{
short int choice;
char number[15];

do{
printf("\n\nAnswer: ");
scanf("%hd",&choice);
printf("\n");
if(choice==1)
{
printf("Enter the decimal number: ");
gets(number);
}
else
{
printf("Wrong input!.");
system("pause");
system("cls");
}
}while(choice!=1);
return 0;
}

最佳答案

因为当用户按下 Enter 键为 scanf 调用提供输入时,Enter 键会在输入缓冲区中添加一个换行符。 gets 调用将该换行符读取为空行。

解决这个问题的一种方法是使用 fgets也读取第一个输入,并使用 sscanf将其解析为数字:

...
printf("\n\nAnswer: ");

char input[64];
fgets(input, sizeof(input), stdin);
sscanf(input, "%hd", &choice);

printf("\n");
...

这可确保读取并跳过输入后的换行符。

另一种方法是在 scanf 调用之后循环读取一个字符,直到读取换行符:

scanf("%hd", &choice);

int ch;
while ((ch = fgetc(stdin)) != EOF && ch != '\n')
{
// Empty
}

第三种方法是简单地要求 scanf 调用读取并忽略输入后的空格:

scanf("%hd ", &choice);
// ^
// |
// Note space here

所有这些方法都有优点和缺点。您可以全部尝试并使用最适合您的一个。

关于c - 为什么第一个 gets() 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34807384/

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