gpt4 book ai didi

c - while循环在C中获取()两次

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:14 25 4
gpt4 key购买 nike

我知道这个 while 循环问题很常见,通常是由输入流中的换行符引起的。但是,我无法修复我的 while 循环,而且我真的不明白为什么它会发生在我的案例中。

考虑以下示例:

 int main()
{
int option = -1;
char buffer[100];
while (option != 10)
{
while(printf("Enter menu choice: \n"), gets(buffer), option < 0)
{
some code here dealing with buffer and assigning input to option...
}
printf("something\n");
}
return 0;
}

忽略此代码的实现(例如,将输入存储为整数而不是字符串等),因为它只是我的 while 循环案例的简化版本。让我担心的是,在它实际通过循环之前我必须输入两次数字。

输出:

进入菜单选项:1

进入菜单选项:1

所有的灯都亮了灯光设置:1111 1111 1111 1111

我不确定为什么会发生这种情况...谢谢!

更新:感谢您的回答。我通过重写我的 while() 条件修复了代码

while(printf("\nEnter menu choice: \n"), gets(buffer),  option = checkMenuOption(buffer), option < 0 && strcmp(buffer, ""));

最佳答案

我可以推荐您使用 fgets而不是 gets ?它更安全,可用于防止缓冲区溢出。

此外,我已经稍微重写了您的代码,这会满足您的需求吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{
int option = -1;

char buffer[100];

while (option != 10)
{
printf("Enter menu choice: \n");

fgets(buffer, 100, stdin); /* get input from the standard input
and save it in the buffer array */

option = atoi(buffer); /* convert input to integer */
}

return 0;
}

如果用户输入“10”,程序将退出:

$ ./a.out 
Enter menu choice:
10
$

如果你想在这里保留旧代码:

#include <stdio.h>
#include <stdlib.h>


int main()
{
int option = -1;
char buffer[100];
while (option != 10)
{
while(printf("Enter menu choice: \n"), gets(buffer), option = atoi(buffer), option < 0)
{

}
printf("something\n");
}
return 0;
}

问题是您没有分配 option循环条件中的任何内容。在第一次测试中,option仍然不是 10,它只是在正文中变成了 10。在第一次运行选项被分配 10(或任何你输入的)之后,while 循环仍然没有评估它,这就是为什么它再次打印语句并询问您输入一个值。

您可以像这样重写循环来测试我的声明(确保更新 option 的代码仍在正文中):

while(option < 0 && printf("Enter menu choice: \n") && gets(buffer))

最后,不要使用逗号,因为逗号分隔的语句总是会被执行(我假设这不是你想要的,在其他情况下它可能完全没问题),它只是列表的最后一个成员测试真/假。看看this .

关于c - while循环在C中获取()两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834984/

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