strcmp () не возвращает то, что должно вернуть - PullRequest
0 голосов
/ 25 ноября 2018

По сути, я хочу создать программу, в которой могли бы быть вопросы, которые могли бы быть в моем предстоящем экзамене по цифровым системам.

#include <stdio.h>
#include <string.h>
int main() {
    char input1[600];
    printf("What is the set of available registers?");
    scanf("%s", &input1);

    if(strcmp(input1, "registers, memory, hard disc") == 0){
        printf("Good job! You got it right");
    }
    else {
        printf("Wrong answer!");
    }

Поэтому, когда я набираю «registers, memory, hard disc», когда меня спрашивают, он возвращает 1 вместо 0. Я не вижу проблемы.Я новичок в C, так что извините, если это глупый вопрос.

Ответы [ 3 ]

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

Попробуйте изменить строку scanf с:

scanf("%s", &input1);

на:

scanf("%[^\n]", input1);

У меня получилось.

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

Рыба-меч уже дала хороший ответ, и fgets предпочтительнее, чем scanf.Однако я хочу показать, как бы вы использовали scanf в этом случае:

if(scanf("%599[^\n]", input1) != 1) {
    // Handle error
}

Так что же отличается?

  1. scanf возвращает количество успешно выполненных назначений, поэтому, если это возвращает 1, то input1 было назначено.Если нет, то произошла ошибка.
  2. Изменено s на [^\n] для чтения до новой строки
  3. Вставлено 599 (один меньше 600), поэтому убедитесь, что мы не пишемвне массива.
  4. Удалено & из input1.В этом случае это, вероятно, будет работать в любом случае, но это неопределенное поведение, которого следует избегать любой ценой.
0 голосов
/ 25 ноября 2018

Как уже сказано в комментариях, scanf() с "%s" останавливает преобразование в первом символе пробела.Чтобы прочитать всю строку текста, используйте fgets():

#include <stddef.h>
#include <stdio.h>
#include <string.h>

// ...

char foo[100];
if(!fgets(foo, sizeof(foo), stdin))  // don't use sizeof on pointers
    ; // handle error                // for that purpose!

size_t length = strlen(foo);
if(length && foo[length - 1] == '\n')  // fgets also reads the newline character 
   foo[--length] = '\0';               // at the end of the line, this removes it.
...