-4

如果输入结束,不应该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;
}
4

3 回答 3

3

这个

scanf("%c",&input);

只读一个char-也许。这是错误的——注意你从编译器得到的错误和警告。

格式说明符不正确 -%c意味着scanf()将尝试读取 a char,但您传递的是char[100]数组的地址。这是未定义的行为,所以任何事情都可能发生。

您也没有检查返回值以查看是否scanf()有效,因此您并不真正知道input.

于 2018-11-07T14:01:04.270 回答
0

在您的情况下,与比较的字符串strncmp("end",input,3) == 0将永远不会匹配,因为input将只包含一个字符。

该调用scanf("%c",&input);将仅读取输入的第一个字符,并将其存储在input

于 2018-11-07T14:03:44.630 回答
-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;
}

下次在继续确认您所做的正确之前打印输入。

于 2018-11-07T14:01:48.333 回答