gpt4 book ai didi

c - 在 Visual Studio 中使用 gets() 时出现问题

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

我正在制作联系人列表,但在 Visual Studio 中使用 gets() 时遇到问题。下面的代码位于 switch 语句内。

    if (nome[i][0] == 0 && numero[i] == 0){
printf("Nome:\n");
fflush(stdin);
gets(nome[i]);
printf("Numero:\n");
scanf("%d", &numero[i]);
}

我遇到的问题是 gets() 被跳过,但是如果我在 gets() 之前放置一个 scanf("%c", &c) ,这样它就可以工作。

    if (nome[i][0] == 0 && numero[i] == 0){
printf("Nome:\n");
fflush(stdin);
scanf("%c", &c);
gets(nome[i]);
printf("Numero:\n");
scanf("%d", &numero[i]);
}

有人告诉我,导致此问题的问题是 Visual Studio 控制台的一个已知问题,并且已修复,但我在互联网上找不到与之相关的任何内容。如果有人告诉我如何解决它,那将会非常有帮助。如果我将第一个代码放入另一个 IDE 中,它就可以工作。

最佳答案

函数 gets 不是标准 C 函数。这是不安全的。您的代码的问题是,输入整数后,新行字符仍在输入缓冲区中,并且下一次调用 gets 会读取空字符串,直到遇到新行字符。

使用标准 C 函数 fgets。

例如,如果表达式 nome[i] 具有字符数组类型,那么您可以编写

fgets( nome[i], sizeof( nome[i] ), stdin );

然后您需要从读入数组的字符串中删除换行符。例如

nome[i][ strcspn( nome[i], "\n" ) ] = '\0';

注意这个调用

fflush(stdin);

有未定义的行为。删除它。

关于c - 在 Visual Studio 中使用 gets() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097852/

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