我试图通过检查一个空字符串(“”)来终止我的C程序,但这似乎不起作用。我也尝试过将其与“ \ 0”进行比较,但无济于事。
#include <stdio.h>
#include <string.h>
int main(void) {
char nameInput[128];
for(;;) {
printf("Enter nation name: ");
scanf("%s", nameInput);
if(!strcmp(nameInput, "")){
break;
}
printf("Got nation named \"%s\"\n", nameInput);
}
printf("All done getting nations!\n");
return 0;
}
不是它不会终止,它正在等待尚未输入的输入。
scanf
未使用正确的模式字符串在回车之前扫描任何内容(包括不包括任何内容)。您需要查看scanf
模式,并将模式从“%s”更改为scanf
将接受作为输入的内容。
如果测试程序,您将看到在按“输入”之后,您可以输入一个单词,然后再次按Enter,由于输入中现在有一个单词,因此scanf
会将其选中(丢弃空格,应使用“%s”)。
"%s"
中的[scanf("%s", nameInput);
”首先从Enter消耗并丢弃包含'\n'
的前导空白,然后扫描并保存到nameInput
。
这就是重复输入空白行不会使扫描前进的原因。 "%s"
正在等待某些非空白输入。
scanf()
的更好替代方法是使用fgets()
读取用户输入,然后解析string
// scanf("%s", nameInput);
if (fgets(nameInput, sizeof nameInput, stdin)) {
// Success at read a line of input.
nameInput[stcspn(nameInput, "\n")] = '\0'; // lop off the potential trailing \n
if(!strcmp(nameInput, "")){ // or simply `if(nameInput[0] == '\0')
break;
}
...