我有一个名为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;
}
答案 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
变量将保留总和