函数gets()不会停止接受输入

时间:2013-11-16 13:10:05

标签: c string visual-studio gets puts

我正在尝试使用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);
}       

1 个答案:

答案 0 :(得分:1)

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

解决方案,首先,摆脱gets(),我不知道为什么它是你必须使用的唯一函数,它可能导致缓冲区溢出因此危险,使用gets()来替换它。其次,使用一些东西来消费新行,你有多个选择。例如,对fgets()使用一次额外的调用。

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