strncmp не возвращает 0 в одинаковых строках - PullRequest
0 голосов
/ 07 ноября 2018

Разве 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;
}

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018
#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;
}

В следующий раз распечатайте ввод, прежде чем продолжить, чтобы подтвердить, что вы все делаете правильно.

0 голосов
/ 07 ноября 2018

В вашем случае строки, сравниваемые с strncmp("end",input,3) == 0, никогда не будут совпадать, так как input будет содержать только один символ.

Вызов scanf("%c",&input); будет читать только первый введенный символ и сохранит его в input

0 голосов
/ 07 ноября 2018

Это

scanf("%c",&input);

читает только один char - возможно. Это неправильно - обращайте внимание на ошибки и предупреждения, которые вы получаете от своего компилятора.

Неверный спецификатор формата - %c означает, что scanf() попытается прочитать char, но вы передаете адрес массива char[100]. Это неопределенное поведение, поэтому может случиться что угодно.

Вы также не проверяете возвращаемое значение, чтобы увидеть, сработал ли scanf(), поэтому вы не знаете, что в input.

...