scanf没有等待输入

时间:2013-04-04 23:30:24

标签: c

我试图在这里找到这个bug,但仍然没有得到它。 我一直在调试和搜索它并发现了一些接近的话题,但是只有我不需要ATM的解决方案,而且我很好奇为什么这段代码不起作用:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define BUFFER 256

int main()
{   
    int missionCode;
    char *desc = (char*)malloc(sizeof(char)*BUFFER);

    do {
        printf("Please enter the mission code (or -1 for exit): ");
        scanf("%d", &missionCode);
        fflush(NULL);
        if (missionCode==-1)
            return 1;
    } while (missionCode>10);

    do {
        printf("Please enter a string:\n");
        scanf("%[^\n]s", desc); //it doesn't stop here!
        fflush(NULL);
        if (!strcmp("exit",desc))
            return 1;
    } while (strlen(desc)<20);

    printf("your string:\n%s", desc);
    return 0;
}

第二个循环中的scanf \ flushall有问题,但我不知道是什么。 顺便说一句,这是C语言。

1 个答案:

答案 0 :(得分:6)

scanf("%d", &missionCode);

将换行符保留在缓冲区中,所以

scanf("%[^\n]s", desc);

立即找到一个并停止。您可以添加空格

scanf(" %[^\n]s", desc);

以跳过初始空格的格式。