当我尝试使用scanf并获取时,我遇到了麻烦,我需要把两次得到,如果我把它放到我的程序终止后,这是功课,我必须在那些地方使用这些功能。
代码:
int main()
{
int i=0,operation=0;
char str[100];
printMenu();
scanf("%d",&operation);
switch (operation)
{
case 1:
printf("Please, enter your sentence >");
gets(str);
gets(str);
if (checkChars(str))
inputSent(str);
else
printf("ERROR: Incorrect data, try again.");
break;
}
return 0;
}
答案 0 :(得分:1)
因此,我们有一个stdin数据流。这是您在终端上写的输入。
当您拨打scanf
时,它只会读取您编写的十进制数。它不会读取后面的换行符。因此,您需要拨打gets
两次电话,因为第一个电话只会看到'\n'
,而第二个电话会看到您的实际数据。
要解决此问题,我建议您在获取操作时使用gets来读取整行,然后使用sscanf来获取操作。
例如:
printMenu();
gets(str)
sscanf(str, "%d", &operation);
switch (operation) {
答案 1 :(得分:0)
在您的第一个scanf()
之后发生的事情是,在输入缓冲区中仍然存在数据(任何形式的空白分隔事物,通常是返回),当您调用下一个gets()
时它返回立即因为它在输入数字后读取了你输入的“输入”。
为了解决这个问题,您需要刷新输入缓冲区。这是一种很好的做法,特别是在阅读单个字符和句子之间切换时。这是我从另一个可能对你有所帮助的帖子中找到的一个小片段(这可以追溯到你的scanf()
):
while (getchar() != EOF);
它的作用是不断地从输入缓冲区中读取字符,直到没有剩下的字符。这可能不是适用于所有情况的最佳解决方案,但它应足以帮助您完成此任务。