使用数组和for循环的基本C帮助

时间:2016-10-14 19:45:10

标签: c arrays for-loop while-loop int

#include "stdafx.h"
#include "stdio.h"
#include <string.h>

void main() {
    int Results[8];
    int i = 0;
    int max = 0;
    int maxindex;

    printf("Enter the results of your 7 leavin cert subjects: ");
    do {
        printf("\nSubject %d: ", i + 1);
        scanf_s("%d", Results);
        i++;
    } while (i < 7);

    for (i < 7; Results[i] > 0; i++)
        if (Results[i] > max)
            max = Results[i];
    printf("The best grade is %d", max);
}

您好,所以基本上我正在尝试使用for循环打印出最大数字(最佳结果)。然而,它一直告诉我,最好的结果是0。

有谁知道我做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的代码中存在两个主要问题:

  • 您使用Results[0]将所有数字读入scanf_s("%d", Results);。你应该写:

    if (scanf_s("%d", &Results[i]) != 1) {
        /* not a number, handle the error */
    }
    
  • 第二个循环不正确:for (i < 7; Results[i] > 0; i++)有多个问题。写下for (i = 0; i < 7; i++)

还有较小的那些:

  • #include "stdio.h"应写为#include <stdio.h>
  • #include "stdafx.h"未被使用,因此可以删除 - 无论如何,如果要使用它,都应该写为#include <stdafx.h>
  • Results数组的大小为8,但您只使用7个广告位。
  • main应该有原型int main(void)int main(int argc, char *argv[])或同等版本。
  • 支持惯用for (i = 0; i < 7; i++)循环而非易错do / while循环。
  • 使用大括号表示非平凡的循环体。

这是一个更简单,更好的版本:

#include <stdio.h>
#include <string.h>

int main(void) {
    int Results[7];
    int i, n, max;

    printf("Enter the results of your 7 leavin cert subjects: ");
    for (i = 0; i < 7; i++) {
        printf("\nSubject %d: ", i + 1);
        if (scanf_s("%d", &Results[i]) != 1) {
            printf("invalid number\n");
            exit(1);
        }
    }

    for (n = i, max = 0, i = 0; i < n; i++) {
        if (Results[i] > max)
            max = Results[i];
    }
    printf("The best grade is %d\n", max);

    return 0;
}