新到C,简单循环

时间:2017-02-17 02:02:38

标签: c

我有一个名为testdata1的文件,我有20个相同数字的值。如何添加所有这些数字,然后将该数字打印到屏幕上。我目前有这个,但我知道这可能是最糟糕的做法,应该使用循环。

#include <stdio.h>

int main(int argc, char *argv[]) {
FILE* fin;
fin = fopen("testdata1.txt", "r");
int n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20, sum;

fscanf(fin, "%d", &n1);
fscanf(fin, "%d", &n2);
fscanf(fin, "%d", &n3);
fscanf(fin, "%d", &n4);
fscanf(fin, "%d", &n5);
fscanf(fin, "%d", &n6);
fscanf(fin, "%d", &n7);
fscanf(fin, "%d", &n8);
fscanf(fin, "%d", &n9);
fscanf(fin, "%d", &n10);
fscanf(fin, "%d", &n11);
fscanf(fin, "%d", &n12);
fscanf(fin, "%d", &n13);
fscanf(fin, "%d", &n14);
fscanf(fin, "%d", &n15);
fscanf(fin, "%d", &n16);
fscanf(fin, "%d", &n17);
fscanf(fin, "%d", &n18);
fscanf(fin, "%d", &n19);
fscanf(fin, "%d", &n20);

sum = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8 + n9 + n10 + n11 + n12 + n13 + n14 + n15 + n16 + n17 + n18 + n19 + n20;
printf("The sum of numbers is %d.\n", sum);
fclose(fin);

return 0; 
}

3 个答案:

答案 0 :(得分:7)

你真的不需要使用数组。只需在阅读时将这些数字加在一起:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int i, n, sum = 0;
    FILE* fin = fopen("testdata1.txt", "r");
    if (!fin) {
        fprintf(stderr,"Error: Unable to open file\n");
        return 1;
    }

    for (i=0; i<20; i++) {
        if (fscanf(fin, "%d", &n) != 1) {
            fprintf(stderr,"Error: Unexpected input\n");
            fclose(fin);
            return 1;
        }
        sum += n;
    }
    printf("The sum of numbers is %d.\n", sum);
    fclose(fin);

    return 0; 
}

答案 1 :(得分:1)

我不太确定你在这里问的是什么,但我很确定你要求一个可以添加所有这些值的循环,所以我会离开那个。

首先,虽然您的设计中存在一些可怕的错误,但首先是您如何声明变量。你真的不需要声明20个变量。您可以根据需要使用两种方法:

一个。如果您需要稍后访问所有这20个变量,请声明一个数组:int values[20]

B中。在顶部声明两个int变量,一个用于sum,另一个用于存储文件中的下一个数字

对于案例A,它看起来像这样:

int main(int argc, char* argv[]){
    int sum, values[20];
    FILE* file = fopen("file");
    for (i=0; i<20; i++) {
        if (fscanf(fin, "%d", &values[i]) != 1) {
            printf("%s\n","error handling here");
            fclose(fin);
            return 1;
        }
        sum += n;
    }
}

对于案例B,好的苛刻的ossifrage已经为你回答了:)

答案 2 :(得分:0)

当然你应该使用一个循环,这次不需要数组;只需替换分别读取每个数字的部分,然后输入:

for (i=0; i<20; i++) {
  fscanf(fin, "%d", &n1);
  sum += n1;
}

你去吧!您的sum变量将保留总和