gpt4 book ai didi

c - fgets() 没有第二次提示用户

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:17 27 4
gpt4 key购买 nike

代码是这样写的。

int main()
{
char enteredName[30];
char stringNum[4];
char continueLetter = 0;
int continueProgram = 0;
int enteredAge;
int i;

do
{
memset(enteredName,'\0', 30);
printf("Please enter a name: ");
fgets(enteredName, 29, stdin);

printf("\n\nNow please enter your age: ");
fgets(stringNum, 3, stdin );

for(i = 0; i < 30; i++)
{
if (enteredName[i] == '\n')
{
enteredName[i] = '\0';
break;
}
}

for(i = 0; i < 4; i++)
{
if (stringNum[i] == '\n')
{
stringNum[i] = '\0';
break;
}
}

enteredAge = atol(stringNum);
} while();

当我第二次运行循环时,我无法在 char 数组中输入新名称,它只是转到下一个提示(年龄)。除非这个问题涉及链表,否则问题似乎出在其他地方。你能帮我找出错误吗?谢谢!

最佳答案

如果您输入两位数的年龄,您的第二个 fgets 调用会留下等待从 stdin 读取的字符(特别是换行符)。

增加长度参数以匹配数组大小:

fgets(stringNum, 4, stdin);

或者更好:

fgets(stringNum, sizeof stringNum, stdin);

您可能想对 enteredName 执行相同的操作。

来自fgets(3) man page :

The fgets() function reads at most one less than the number of characters specified by size from the given stream and stores them in the string str.

您不需要像现在这样为空终止符保留额外的数组条目 - fgets 会自行正确处理。

关于c - fgets() 没有第二次提示用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227981/

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