0

在 C 编程语言中,我需要做这个问题:

- 写下一个程序来输入一个数字。程序读入数字并确定它是偶数还是奇数。如果数字是偶数,程序会要求用户输入他的年龄。如果年龄在 18 岁或以上,程序会输出消息“你可以投票!” 否则消息“你不能投票”。如果数字是奇数,程序会要求用户输入一个字符。如果字符是小写的,程序会显示消息“祝你好运!” 否则程序会输出消息“努力工作!”。

很遗憾。当我输入一个奇数比如 3 时,它会显示“输入一个字符:祝你好运!” 在我有机会输入字符之前..它直接进入最后一个。请帮忙!

int main()
{
int num,age;
char c;
printf("Enter number: ");
scanf("%d", &num);

if (num%2 == 0)
    {
     printf("Age: ");
     scanf("%d",&age);

        if (age>=18)
            printf("You can vote!");
        else
            printf("You cannot vote.");
    }
 else
 {
  printf("Enter a character: ");
  scanf("&c",&c);

        if(c>='A' && c<='Z')
            printf("Work hard!");
        else
            printf("Good luck!");
  }

}
4

4 回答 4

1

排队 :

scanf("&c",&c);

应该是("%c", &c); ,但即使你解决了这个问题,它仍然是错误的,因为scanf在输入缓冲区中留下 '\n' 字符,所以下一次,当你用 scanf("%c", &c) 读取一个字符时,它会 assing c='\n'。您可以通过更改为此轻松解决此问题

 scanf(" %c", &c);

' '在 %c 之前注意。这个空格告诉 scanf 在从输入中读取任何字符之前吃掉所有尾随空格(包括 \n)。

这是用于读取混合数据和字符的 scanf 的常见问题,因此请始终牢记这一点。

从我注意到你的主要没有回报。放在return 0;函数的末尾main

于 2013-09-20T18:19:00.797 回答
0

您在上一个scanf()格式规范中有一个类型。因此,scanf()什么都不做(返回 0 作为转换次数)。您应该始终检查scanf().

于 2013-09-20T18:19:08.037 回答
0

前一个的尾随输入scanf被用作下一个的输入scanf

您需要“吃掉”尾随的换行符:

像这样:

while( (c=getchar()) != '\n' && c!= EOF);

或干脆使用:

scanf(" %c", &c); //Notice a space

还修复:

scanf("&c",&c);scanf("%c",&c);

于 2013-09-20T18:21:31.460 回答
0

代替这个(我想这&c只是一个错字):

scanf("&c",&c);

尝试这个:

scanf("%c%*c", &c);

说明%c符只消耗一个字符,在标准输入缓冲区中留下一个换行符;被下一次调用读取并失败if(c>='A' && c<='Z')

%*c告诉它读取另一个字符并丢弃(*)它,这应该摆脱换行符。

于 2013-09-20T18:22:25.060 回答