2016-01-21 2 views
-3

Учитывая ИНТ переменного с именем yesCount и другой ИНТ переменным с именем NOCOUNT и переменной обугленным с именем ответ, напишите код, необходимый для считывания значения в в ответ, а затем выполнить следующие действия:содержания стандартного вывода неверно

  • , если введенный символ в это y или Y затем увеличить yesCount и распечатать "YES WAS RECORDED"
  • , если введенный символ в это n или N затем увеличить noCount и распечатать "NO WAS RECORDED"
  • Если вход недействителен, просто распечатайте сообщение "INVALID" и ничего не делайте.

Здравствуйте, у меня возникли проблемы с кодом C для этой проблемы. Я получаю неправильные выходы. Любая помощь очень ценится. Спасибо.

if (response == 'y' || response == 'Y') { 
    scanf("%d", &yesCount); 
    yesCount++; 
    printf("YES WAS RECORDED"); 
} 

if (response == 'n' || response == 'N') { 
    scanf("%d", &noCount); 
    noCount++; 
    printf("NO WAS RECORDED"); 
} else { 
    printf("INVALID"); 
} 
+1

Где вы получаете значение для 'response'? – lurker

+1

Использование коммутатора будет действительно эффективным для вашего кода –

+3

Почему вы вызываете 'scanf' для' yesCount' и 'noCount'? Как вы читаете «ответ»? –

ответ

1

Здесь может быть опечатка, потому что я пишу с моего смартфона. Помните об этом. Кстати вот как, как я бы это сделать:

#include <stdio.h> 

int main(void) { 

    int yescount = 0, nocount = 0; 
    int c; 

    while ((c = getchar) != EOF) { 
     switch (c) { 
      case 'y': 
      case 'Y': 
      puts("Yes registered"); 
      yescount++; 
      break; 

      case 'n': 
      case 'N': 
      puts("No registered"); 
      nocount++; 
      break; 

      default: 
      puts("Invalid selection."); 
      break; 
     } 
    } 
    return 0; 
} 
1

Вы должны знать, как представить свой код правильно: это очень помогает с читаемостью и делает много ошибок более заметными.

Есть проблемы с вашим кодом:

  • Вы называете scanf без всякой цели, но вы не прочитали ответ, как просили.
  • Вы забыли else в конце тела первого if. Следствием этого является то, что последняя ветвь else берется, если ответ y или Y.
  • После каждого сообщения вы должны напечатать \n, чтобы он отображался отдельно от последующего вывода.

Вот исправленный вариант:

scanf("%c", &response); 
if (response == 'y' || response == 'Y') { 
    yesCount++; 
    printf("YES WAS RECORDED\n"); 
} else 
if (response == 'n' || response == 'N') { 
    noCount++; 
    printf("NO WAS RECORDED\n"); 
} else { 
    printf("INVALID\n"); 
} 

Ваш комментарий, они ожидают, что вы используете scanf("%c", &response); прочитать char в response, не самый простой способ прочитать байт из stdin.

+0

CODELAB АНАЛИЗ: ЛОГИЧЕСКИЕ ОШИБКИ (S) Дополнительные советы: ⇒ Вы почти наверняка должны использовать: & ⇒ Вы почти наверняка должны использовать:, (запятая) ⇒ Вы почти наверняка должны использовать: зсапЕ Обнаруженные проблемы: ⇒ Содержимое вашего стандартного выхода неверно. ⇒ Значение noCount неверно. ⇒ Значение ответа неверно. ⇒ Значение yesCount неверно. ⇒ Для получения дополнительной информации: СЛУЧАЙ ТЕСТИРОВАНИЯ ИСПЫТАНИЯ Это то, что я получаю, когда я отправляю проблему – user44775

+0

Я обновил ответ. Неясно, следует ли вам писать фрагмент кода или компилируемую функцию. Если yesCount и noCount * заданы *, вы должны изменить их только по указанию, но попробуйте 'yesCount = noCount = 0;', чтобы проверить, ожидают ли они, что вы инициализируете их до '0'. – chqrlie

+0

Благодарю вас за помощь! – user44775

Смежные вопросы