我正在尝试构建一个在用C编写的命令行中运行的程序,如下所示:
int main(void){
char code[25];
char *fullCmd;
char *command;
char *extraCmd;
bool stop = false;
int loop = 1;
while (loop == 1){
printf("C:\\>");
scanf("%[^\n]",code);
fullCmd = strdup(code);
command = strtok(fullCmd, " ");
extraCmd = strtok(NULL, " ");
handStatement(code, command, extraCmd);
if(strcmp(command,"exit\n") == 0 || strcmp(command, "quit\n") == 0){
loop = 0;
printf("Program Terminated\n");
}
}
return 0;
}
HandStatement()
是我的手柄之一。但是这里的问题是,当执行handStatement()
时,while循环不会停止让我输入另一个命令。如果我不使用while,我可以一次执行一个命令。
答案 0 :(得分:3)
您的\n
电话中不需要跟踪strcmp
个字符。
if(strcmp(command,"exit") == 0 || strcmp(command, "quit") == 0){
loop = 0;
printf("Program Terminated\n");
}
此外,您需要从stdin中刷新换行符:
while (loop == 1){
printf("C:\\>");
scanf("%[^\n]",code);
fullCmd = strdup(code);
command = strtok(fullCmd, " ");
extraCmd = strtok(NULL, " ");
handStatement(code, command, extraCmd);
if(strcmp(command,"exit") == 0 || strcmp(command, "quit") == 0){
loop = 0;
printf("Program Terminated\n");
}
/* Flush whitespace from stdin buffer */
while(getchar() != '\n');
}
答案 1 :(得分:0)
如果从代码中删除'\ n',它就会起作用。除非您的终止字符已被更改,否则它实际上不会将换行符放入字符串中,因此您的strcmp()将始终返回不相等。