我试图在这里找到这个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语言。
答案 0 :(得分:6)
scanf("%d", &missionCode);
将换行符保留在缓冲区中,所以
scanf("%[^\n]s", desc);
立即找到一个并停止。您可以添加空格
scanf(" %[^\n]s", desc);
以跳过初始空格的格式。