如何在数组中利用fprintf?

时间:2018-08-01 07:33:36

标签: c

我需要一些帮助。我正在尝试将代码的输出写入文件。 但是,每当我尝试在数组中使用fprintf时都会遇到问题。该代码可以在没有fprintf语句的情况下正常工作,每行打印5个分数。添加后,似乎可以继续增加数组?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>

void displayScore(int testScores[]);
FILE *fpOut;

int main(void) {

if (!(fpOut = fopen("csis.txt", "w"))) {
    printf("csis.txt could not be opened for input.");
    exit(1);
}

int testScores[] = { 90, 85, 100, 50, 50, 85, 60, 70, 55, 55, 80, 95, 70, 60, 95, 80, 100, 75, 70, 95, 90, 90, 70, 95, 50, 65, 85, 95, 100, 65 };

displayScore(testScores);

fclose(fpOut);
system("pause");
return 0;
}

void displayScore(int testScores[]) {
int i = 0;

/*Prints 5 scores every line*/
for (i = 0; i < 30; i++) {
    printf("%d, ", testScores[i]);
    fprintf(fpOut, "%d, ", testScores[i]);
    printf("%5d, ", testScores[i += 1]);
    fprintf(fpOut, "%5d, ", testScores[i += 1]);
    printf("%5d, ", testScores[i += 1]);
    fprintf(fpOut, "%5d, ", testScores[i += 1]);
    printf("%5d, ", testScores[i += 1]);
    fprintf(fpOut, "%5d, ", testScores[i += 1]);
    printf("%5d, \n", testScores[i += 1]);
    fprintf(fpOut, "%5d, \n", testScores[i += 1]);
}
return;
}

2 个答案:

答案 0 :(得分:1)

正如已经指出的那样,

printf("%5d, ", testScores[i += 1]);
fprintf(fpOut, "%5d, ", testScores[i += 1]);

您要在stdout上打印一个数字,在文件中打印下一个数字。因此,每个备用数字都将出现在文件中,而其他数字将被打印到stdout中。

您可以将其修改为

printf("%5d, ", testScores[i]);
fprintf(fpOut, "%5d, ", testScores[i]);
i+=1;

即,仅在同时打印到i和文件之后,再递增stdout

或者您可以使用后缀增量运算符,例如

printf("%5d, ", testScores[i]);
fprintf(fpOut, "%5d, ", testScores[i++]);

i++中,i的值将增加,但表达式中将使用i的初始值。阅读What is the difference between prefix and postfix operators?

而不是自己重复,您可以使计算机以类似的方式进行重复

for (i = 0; i < 30; i++) {
    printf("%5d, ", testScores[i]);
    fprintf(fpOut, "%5d, ", testScores[i]);
    if((i+1)%5==0)
    { 
        printf("\n");
        fprintf(fpOut, "\n");
        }

}

仅在i+15整除时才打印换行符。


不建议使用system()。参见Why should the system() function be avoided in C and C++?

答案 1 :(得分:0)

  

添加后,它似乎可以继续增加数组?

是的,您经常增加数组索引:

printf("%5d, ", testScores[i += 1]);
fprintf(fpOut, "%5d, ", testScores[i += 1]);

您为i递增计数器printf,为fprintf递增计数器。 虽然您可能想在两个命令中打印相同的元素,但是您可以访问两个相邻的元素。

要修复此增量仅一次。