如何通过单个scanf输入多个变量

问题描述 投票:-1回答:1

这个问题

一位数学老师要求她的学生给出3个正奇数的例子。当学生指定正确答案时,他/她的分数增加1.当学生指定正偶数时,他/她的分数减0.5。当学生指定负数时,他/她将不再有机会纠正他或她的错误,他/她的分数将减少1.因此,当他/她正确指定时,学生轮到他们3个正奇数或当学生指定负数时。

很少有学生不知道奇数和偶数之间的差异,他们犯了很多错误,所以教师很难维持得分。老师请求你的帮助。

你可以通过写一个程序计算分数来帮助她吗?

样品输入1:1 3 5样品输出1:3.0

样品输入2:1 2 5 6 7样品输出2:2.0

样品输入3:2 -4样品输出3:-1.5

样品输入4:3 3 3样品输出4:3.0


问题:

在这里,我没有得到如何通过单一scanf输入多个变量


这是我的代码

#include<stdio.h>
int main()
{ 
    int a,i;
    float b=0;
    for(i=1;i<=3;i++)
    {
        scanf("%d",&a);
        do
        {
            if(a%2==0)
            {
                b=b-0.5;
            }
            if(a<0)
            {
                b--;
            }
            else if(a%2!=0)
            {
                b++;
            }
            printf("%.1f",b);
        }
        while(a%2!=0);
        break;
    }
    return 0;
}
c
1个回答
1
投票

看,下面的for循环只会迭代3次:

for(i=1;i<=3;i++)

而你输入的时间可能超过3次数(参见样本输入2)!

除了代码中的一些逻辑错误外,还有一些语法问题。

  • 而不是float b=0;使用float b = 0.0;

请注意,如果输入为负偶数,则以下代码将减少b0.5

if(a%2==0)
{
   b=b-0.5;
}

直接的if条件将再次通过b减少1

if(a<0)
{
   b--;
}

这将使你的结果更加减少0.5,这是不正确的。

根据您的问题定义,Sample Input是可变的,因此您还必须实现循环。尝试这样的事情:

int input, correctResultCount = 0;
float result = 0.0;
while (true) {
    scanf("%d", &input);

    if (input < 0) {
        result--;
        break;
    }
    if (input % 2 == 0) {
        result = result - 0.5;
    }
    if (input % 2 != 0) {
        result++;
        correctResultCount++;
    }
    if (correctResultCount == 3)
        break;
}
printf("%.1f", result);

Run Live.

© www.soinside.com 2019 - 2024. All rights reserved.