1

我目前正在练习 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 上搜索。

提前致谢。

4

6 回答 6

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");
    }
}
于 2013-07-11T23:44:13.417 回答
1

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

看哪,else语句!

// 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 if语句来进一步复杂化,以允许多个条件,如下所示:

// 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”语句的情况下,可以执行多个条件逻辑,因为它们不是互斥的。if/else if/else 都是互斥的,而 if/if/if 可以执行所有分支(假设它们检查的条件本质上不是互斥的,就像上面的情况——一个数字不能大于 8 小于 1同时)。

于 2013-07-11T23:50:51.207 回答
0

这应该这样做:

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

}
于 2013-07-11T23:42:02.797 回答
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 0return EXIT_SUCCESS以使您的代码更具描述性。

于 2013-07-11T23:44:10.530 回答
-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);
}
于 2013-07-11T23:46:08.287 回答
-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),请在第一次检查中使用。

于 2013-07-11T23:41:45.873 回答