您的问题很可能在这里:
char *ch=malloc(sizeof("50");
首先,您缺少一个右括号。但是假设这是发布问题而不是您的实际代码中的错字,则存在更深层次的问题。
"50"
双引号内是字符串文字。当sizeof()
应用于字符串文字时,您将获得字符串中的字符数,包括 terminating NUL
。所以你只为ch
.
当您尝试scanf()
输入时,您正在写入超过三字符缓冲区的末尾ch
。省略sizeof()
并简单地说:
char* ch = malloc (50);
此外,扫描集%[^\n]
不会跳过前导空格。您的第一个将停在换行符处,该换行符将保留在缓冲区中。循环中的后续调用将遇到该换行符并尽职地停止,因为它已从您的扫描集中排除。所以循环条件scanf()
scanf()
while
while (strcmp (ch, "exit"))
永远不会成为现实,你会得到一个无限循环。在 之后使用换行符scanf()
以避免此问题:
scanf ("%[^\n]%*c", ch);
意思是“%*c
读取一个字符然后丢弃它”。所以它会读取\n
缓冲区中剩下的内容,然后不会将其保存在任何地方。因此,您的 nextscanf()
不会\n
在缓冲区的开头遇到 a ,并且您的程序将按您的意愿运行。