【问题标题】:Function gets() doesn't stop to take input函数 gets() 不会停止接受输入
【发布时间】:2013-11-16 13:10:04
【问题描述】:

我正在尝试使用 gets() 函数将输入输入到 2 个字符串中(并且我必须只使用此函数)

但是当我运行程序时,控制台只是继续进入第二个gets(),甚至没有停下来获取第一个输入。

当我调试时,我没有看到任何输入被插入到字符串cityName,它只是通过它。

我也知道,处理字符串时缓冲区存在问题,有没有办法使用 puts()gets() 函数“清理”缓冲区?

#include <stdio.h>
#include <math.h>
#include <string.h>
void main() {
    int z;
    char cityName[50];
    char Coordinates[50]; 
    scanf("%d", &z);
    printf("Please enter city name:\n");
    gets(cityName);
    printf("Please enter city coordinates\n");
    gets(Coordinates);
}       

【问题讨论】:

    标签: c string visual-studio gets puts


    【解决方案1】:

    在对scanf("%d", &amp;z); 的调用中,当您输入一个整数并按ENTER 时,该数字被scanf 消耗,但新行仍在缓冲区中,导致下一个gets() 仅获得该数字换行。

    解决方法,首先去掉gets(),不知道为什么只能用这个函数,可能会导致缓冲区溢出很危险,用fgets()代替。第二,用东西消费新线,你有不止一种选择。例如,额外调用一次fgets()

    另外,使用int main(void),使用声明void main() 是未定义的行为。

    【讨论】:

    • 我已经看到了很多关于 gets() 中的危险的问题,这根本不是我的要求..我必须使用它,而且只有它。
    • @user3921 好吧,告诉做出决定的人您必须使用gets() 的危险。此外,它已从最新标准(C11)的 C 标准库中删除。
    • 我想我设法处理了它,我使用了一个while循环并使用getchar,直到我在每次输入后达到/ n ..似乎正在工作。我知道使用gets 和puts 很愚蠢,但这些是我的指示,我不想因为这种东西而失败。谢谢
    • @user3921:告诉你的导师他应该得到线索,并且实际上警告人们不要使用gets(),而不是强迫他们使用它。
    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多