gpt4 book ai didi

c - 为什么这段代码永远循环?

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:23 24 4
gpt4 key购买 nike

我是 c 的新手,遇到了这个奇怪的问题:我想写一个 c 代码让用户输入命令并做一些工作,这是我的代码:

int main()
{
const int size = 100;
while(1){
char* currentDir;
if((currentDir = getcwd(currentDir, 1024)) == NULL) {
fprintf(stderr, "getcwd failed.\n");
exit(0);
}
printf("%s > ", currentDir);

char *command;
command = (char*)calloc(size, sizeof(char));
scanf("%[^\n]", command);
if(strcmp("exit", command) == 0) {
printf("%s\n", command);
exit(0);
}
else {
//do jobs based on user input
}
free(command);
}
}

如果用户输入“exit”,程序将结束。但是,如果用户输入其他字符串,如“ll”或其他内容,程序将继续循环,永远不会让用户输入另一个命令。为什么?

最佳答案

这一行:

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

正在读取最多 但不包括 换行符并将它们放入 command 中的字符。换行符留在输入缓冲区中。

当您在循环中下次执行该语句时,它会做同样的事情......除了它遇到的 first 字符将是它上次看到的相同换行符。最终结果:它将 command 设置为空字符串,并为下一次调用保留换行符。等等。

您需要消费那个换行符。

关于c - 为什么这段代码永远循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com