gpt4 book ai didi

c - 如何修复嵌套在 if-else 中的 while 循环?

转载 作者:行者123 更新时间:2023-11-30 15:46:22 25 4
gpt4 key购买 nike

我目前正在编写一些代码,我知道它有问题。我的代码提示用户输入名称,并使用 fgets () 或 sscanf () 将其存储为字符串。如果用户输入错误(即数字或字母数字大小写),它应该打印错误消息并要求再次输入,直到用户输入正确的输入。我还初始化了:

字符名称 [47];

printf ( "Name: " );

//some code dealing with newline character with the use of fgets

if ( (sscanf (name, %s, name)) == 1 )
//some code dealing with this condition
else {
do {
printf ( "ERROR: Invalid name. Name should consist of letters only.\n" );
printf ( "Name: " );
if (fgets ( name, sizeof (name), stdin ) == '\0' )
//some code dealing with EOF
} while ((sscanf (name, %s, name)) != 1);
}

谁能告诉我出了什么问题吗?

最佳答案

char name[47];
char line[4096];

while (printf("Name: ") > 0 && fgets(line, sizeof(line), stdin) != 0)
{
if (sscanf(line, "%46s", name) != 1)
...empty line?...
else if (valid_name(name))
break;
printf("Error: invalid name (%s). Name should consist of letters only.\n", name);
}

您忘记了 printf() 返回它打印的字符数?嗯,大多数人不会经常测试其结果,但在这种情况下这样做很有用。测试可能是 != 6 而不仅仅是 > 0,但在实践中两者都可能正常工作。

请注意使用“%46s”将值读取到name中,而不会出现缓冲区溢出的风险。另请注意,sscanf() 不会将换行符读入 name

关于c - 如何修复嵌套在 if-else 中的 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456931/

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