如果输入结束,strncmp("end",input,3) == 0
是否应该返回0?但是它返回一个数字> 0。
#include <stdio.h>
int main(void) {
char *strArray[100];
int strLengths[100];
char input[100];
int flag = 0;
do {
scanf("%c",&input);
if(strncmp("end",input,3) == 0) {
printf("end\n");
}
printf("%d\n",strncmp("end",input,3));
} while(flag !=0);
return 0;
}
答案 0 :(得分:3)
此
scanf("%c",&input);
可能只读取一个char
。是错误的-请注意您从编译器得到的错误和警告。
格式说明符不正确-%c
意味着scanf()
将尝试读取char
,但是您正在传递char[100]
数组的地址。那是未定义的行为,所以任何事情都可能发生。
您也不检查返回值是否完全scanf()
有效,因此您实际上并不知道input
中的内容。
答案 1 :(得分:0)
在您的情况下,与strncmp("end",input,3) == 0
相比的字符串将永远不会匹配,因为input
仅包含一个字符。
呼叫scanf("%c",&input);
将仅读取输入的第一个字符,并将其存储在input
答案 2 :(得分:-1)
#include <stdio.h>
int main(void) {
char *strArray[100];
int strLengths[100];
char input[100];
int flag = 0;
do {
scanf("%s",input); //%c is for a single char and %s is for strings.
if(strncmp("end",input,3) == 0) {
printf("end\n");
}
printf("%d\n",strncmp("end",input,3));
} while(flag !=0);
return 0;
}
下一次打印输入内容,然后继续确认操作正确。