我正在尝试使用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);
}
答案 0 :(得分:1)
在对scanf("%d", &z);
的调用中,当您输入一个整数并按ENTER时,scanf
消耗该数字,但新行仍在缓冲区中,导致下一个{{1只获得那条新行。
解决方案,首先,摆脱gets()
,我不知道为什么它是你必须使用的唯一函数,它可能导致缓冲区溢出因此危险,使用gets()
来替换它。其次,使用一些东西来消费新行,你有多个选择。例如,对fgets()
使用一次额外的调用。
另外,使用fgets()
,使用声明int main(void)
是未定义的行为。