我需要一些帮助。我正在尝试将代码的输出写入文件。 但是,每当我尝试在数组中使用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;
}
答案 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+1
被5
整除时才打印换行符。
不建议使用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
递增计数器。
虽然您可能想在两个命令中打印相同的元素,但是您可以访问两个相邻的元素。
要修复此增量仅一次。