4

我试图在这里找到错误,但仍然没有得到它。我一直在调试和搜索它并找到了一些接近的主题,但只有我不需要 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。

4

1 回答 1

6
scanf("%d", &missionCode);

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

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

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

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

以跳过初始空格的格式。

于 2013-04-04T23:35:46.890 回答