0

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

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

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

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

#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);
}       
4

1 回答 1

1

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

解决方法,首先去掉gets(),我不知道为什么它是你必须使用的唯一函数,它可能会导致缓冲区溢出从而很危险,用fgets()它来替换它。第二,用东西消费新线,你有不止一种选择。例如,对fgets().

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

于 2013-11-16T13:16:02.873 回答