标准输出的内容不正确

时间:2016-01-21 22:54:08

标签: c

给定一个名为yesCount的int变量和另一个名为noCount的int变量以及一个名为response的char变量,写入必要的代码以将值读入响应中,然后执行以下操作:

  • 如果输入的字符是yY,则增加yesCount并打印"YES WAS RECORDED"
  • 如果输入的字符是nN,则增加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");
}

2 个答案:

答案 0 :(得分: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 :(得分:1)

您应该学习如何正确地呈现您的代码:它有助于提高可读性并使许多错误更加明显。

您的代码存在问题:

  • 您没有任何目的致电scanf,但未按要求阅读回复。
  • 您在第一个else的正文末尾忘记了if。结果是,如果回复为elsey,则会采用最后一个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读取字节的最简单方法。