简单的C语言代码问题

时间:2013-07-11 23:39:16

标签: c

我目前正在练习C语言,并且遇到一个简单的基本编码问题,这个问题将平均分为学校科目。

以下是代码:

#include <stdio.h>
int main()
{
int a;
int sub, score;
float totalscore = 0;

printf("How many subjects to average? - 8 or less subjects - \n");
    scanf("%d", &sub);

    if(sub > 8)
    { 
        printf("number of subjects cannot be more than 8 \n");
    }

printf("Enter score for each subjects \n");
    for(a =1;a <= sub;a++)
    {
        printf("Subject %d : ", a);
        scanf("%d", &score);
        totalscore = totalscore + score;
    }

printf("Total %d number of subjects' average is %.2f", sub, totalscore/sub);

return 0;
}

如果有人输入他们希望平均的科目数,则继续说“为每个科目输入分数”,他们将能够输入每个科目的分数。

所以我的问题是如果放入超过8个科目,你如何使该计划不能继续?并且只是呆在那里但是,显示“主题数量不能超过8”?

我认为这是一个非常简单的问题,但我不知道如何在Google上搜索这个问题。

提前致谢。

6 个答案:

答案 0 :(得分:3)

如果您想让用户再次尝试,您可以将获取主题数量的代码放入循环中,直到用户输入有效数字为止。

sub = 9;
while (sub > 8 || sub < 1)
{
    printf("How many subjects to average? - 8 or less subjects - \n");
    scanf("%d", &sub);

    if (sub > 8)
    {
        printf("number of subjects cannot be more than 8\n");
    }
    else if (sub < 1)
    {
        printf("number of subjects cannot be less than 1\n");
    }
}

答案 1 :(得分:1)

想想你的逻辑。你有它大多是正确的。您正在检查错误情况,但如果错误条件为真,您在做什么?另一个答案建议使用exit()函数,这肯定会在这种情况下起作用,但是你的问题暴露了你对编程逻辑的理解上的差距 - 如果你现在弄明白的话,它会在将来让你头疼

看,其他声明!

// Check for "too many" subjects
if(sub > 8)
{
    printf("number of subjects cannot be more than 8 \n");
}
// Only allow processing if the number of subjects was <= 8
else
{
    // for loop processing for input goes here
}

if / else系列语句确保只有一个分支执行。如果 else 语句允许多个条件,则可能会进一步复杂化,如下所示:

// Check for "too many" subjects
if(sub > 8)
{
    printf("number of subjects cannot be more than 8 \n");
}
// Check for "too few" subjects
else if(sub < 1)
{
    printf("number of subjects cannot be less than 1 \n");
}
// Only allow processing if the number of subjects was <= 8
else
{
    // for loop processing for input goes here
}

请注意“else if”的重要性,而不是“if”。在所有条件逻辑都是“if”语句的情况下,可以执行多个条件逻辑,因为它们不是互斥的。如果/ else if / else都是互斥的,而if / if / if可以执行所有分支(假设它们检查的条件本身并不相互排斥,如上所述 - 数字不能大于8且小于1同时)。

答案 2 :(得分:0)

这应该做:

if(sub > 8)
{ 
    fprintf(stderr, "number of subjects cannot be more than 8 \n");
    exit (EXIT_FAILURE);

}

答案 3 :(得分:0)

如果你想做的就是让程序停止,那么

if (sub > 8)
{ 
    printf("number of subjects cannot be more than 8 \n");
    return EXIT_FAILURE;
}

应该足够了,但是如果你想在之后做一些事情,你也可以写一个else条件并将其余的代码包装在else块中:

if (sub > 8)
{ 
    printf("number of subjects cannot be more than 8 \n");
}
else
{
    // Rest of code here
}

您也可以考虑将return 0替换为return EXIT_SUCCESS,以使您的代码更具描述性。

答案 4 :(得分:-1)

您可以尝试以下方法:

while(sub > 8)
{ 
    printf("number of subjects cannot be more than 8 \n");
    printf("How many subjects to average? - 8 or less subjects - \n");
   scanf("%d", &sub);
}

答案 5 :(得分:-2)

在你的循环中,只需使用if(a == 8) break;

for(a =1;a <= sub;a++) {
        if(a == 8) break; // it interrupts this loop
        printf("Subject %d : ", a);
        scanf("%d", &score);
        totalscore = totalscore + score;
}

否则,如果您想在第一次检查中完全退出程序,请使用exit(EXIT_FAILURE)