【问题标题】:Which operators should I use in this C language test?在这个 C 语言测试中我应该使用哪些运算符?
【发布时间】:2021-12-01 23:32:55
【问题描述】:

在巴西,只有年满 18 岁的人才需要投票。但是,在 16 岁时,此人已经可以选择获得选民登记卡。如果她发卡,从这一刻起她必须投票。考虑到所描述的情况,您将使用哪些逻辑运算符来检查一个人是否有义务在收到 2 条信息后投票:年龄和他/她是否有选民登记?指示要使用哪些运算符并以文本形式构造条件。

#include <stdio.h>
int main(){
   int age
   char card
   printf("age");
   scanf("%d", &age);

   if(age>=18) {
      printf("Can vote!");
   }

   if(age<18 && age>=16){
      printf("do you have card? y or n");
      scanf("%c", &card);
      if(titulo=="y"){
         printf("can vote");
      }
      else {
         printf("cant vote");
      }
   }

   if(age<16){
      printf("cant vote");
   }

   return 0;
}

【问题讨论】:

  • 对我来说看起来基本正确。最大的事情是if(titulo=="y")。 titulo 是什么?那应该是card 吗?如果是这样,那应该是if(card=='y'),注意单引号',表示char,双引号" 用于字符串。您还应该将其更改为 if ... else if ... else

标签: c testing


【解决方案1】:

一些错误。

  1. 变量声明的末尾需要;(即错别字)

  2. 第二个 scanf 必须是 " %c" [and not "%c"] 才能跳过第一个 scanf 的换行符。

  3. titulo 未定义,应为card

  4. 我们想将单个字符 card 与 character 常量(例如 'y')和 not string 常量(例如"y")。

这是更正后的代码。有注释:

#include <stdio.h>

int
main(void)
{
// NOTE/BUG: missing semicolons
#if 0
    int age
    char card
#else
    int age;
    char card;
#endif

    printf("age");
    scanf("%d", &age);

    if (age >= 18) {
        printf("Can vote!");
    }

    if (age < 18 && age >= 16) {
        printf("do you have card? y or n");

// NOTE/BUG: this needs to account for newline on previous scanf
#if 0
        scanf("%c", &card);
#else
        scanf(" %c", &card);
#endif

// NOTE/BUG: titulo is undefined and should be card
// NOTE/BUG: we want to compare card against a _character_ constant and _not_
// a string constant
#if 0
        if (titulo == "y") {
#else
        if (card == 'y') {
#endif
            printf("can vote");
        }
        else {
            printf("cant vote");
        }
    }

    if (age < 16) {
        printf("cant vote");
    }

    return 0;
}

虽然您的if/else 梯形逻辑没问题,但可以稍微简化一下,如果我们使用一个额外的变量来表示投票的能力(例如can),我们可以消除一些重复的printf 调用:

#include <stdio.h>

int
main(void)
{
    int age;
    char card;
    int can;

    printf("age? ");
    scanf("%d", &age);

    do {
        if (age >= 18) {
            can = 1;
            break;
        }

        if (age < 16) {
            can = 0;
            break;
        }

        printf("do you have card? y or n ");
        scanf(" %c", &card);

        can = (card == 'y');
    } while (0);

    if (can)
        printf("Can vote!\n");
    else
        printf("can't vote\n");

    return 0;
}

【讨论】:

  • 请注意,您的问题仅在标题中。文本只是一个问题陈述。我能够回答这个问题,但是,最好在文本中说明 what 您遇到的问题
  • 非常感谢!我刚刚开始学习编程课程,这是一次具有挑战性的经历,但您的回答确实帮助了我。我会期待改进我的问题格式。
  • 不客气!请考虑投票/接受答案。见:stackoverflow.com/help/someone-answers
猜你喜欢
  • 2022-01-27
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多