C 如何在阵列中使用fprintf?

C 如何在阵列中使用fprintf?,c,C,我需要一些帮助。我正试图将代码的输出写入一个文件。 然而,每当我试图在数组中使用fprintf时,就会遇到一个问题。代码在没有fprintf语句的情况下正常工作,每行打印5个分数。添加后,它似乎会继续递增数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> void displayScore(int testScores[]); FILE *fpOut; int main(vo

我需要一些帮助。我正试图将代码的输出写入一个文件。 然而,每当我试图在数组中使用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;
}
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
无效显示分数(int testScores[]);
文件*fpOut;
内部主(空){
如果(!(fpOut=fopen(“csis.txt”,“w”)){
printf(“csis.txt无法打开进行输入。”);
出口(1);
}
int测试分数[]={90,85,100,50,50,85,60,70,55,80,95,70,60,95,80,100,75,70,95,90,90,70,95,50,65,85,95,100,65};
显示分数(测试分数);
fclose(fpOut);
系统(“暂停”);
返回0;
}
void displayScore(int testScores[]){
int i=0;
/*每行打印5个分数*/
对于(i=0;i<30;i++){
printf(“%d”,测试分数[i]);
fprintf(fpOut,“%d”,测试分数[i]);
printf(“%5d”,测试分数[i+=1]);
fprintf(fpOut,“%5d”,测试分数[i+=1]);
printf(“%5d”,测试分数[i+=1]);
fprintf(fpOut,“%5d”,测试分数[i+=1]);
printf(“%5d”,测试分数[i+=1]);
fprintf(fpOut,“%5d”,测试分数[i+=1]);
printf(“%5d\n”,测试分数[i+=1]);
fprintf(fpOut,“%5d\n”,测试分数[i+=1]);
}
返回;
}
添加后,它似乎会继续递增数组

#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;
}
是的,您增加数组索引的次数太多:

printf("%5d, ", testScores[i += 1]);
fprintf(fpOut, "%5d, ", testScores[i += 1]);
您可以为
printf
增加一次计数器
i
,为
fprintf
增加一次计数器。 虽然您可能希望在两个命令中打印相同的元素,但可以访问两个相邻的元素


只修复一次该增量。

正如前面所指出的,使用

printf("%5d, ", testScores[i += 1]);
fprintf(fpOut, "%5d, ", testScores[i += 1]);
您正在将一个数字打印到标准输出,将下一个数字打印到文件。因此,每个备用数字都将出现在文件中,其他数字将打印到
stdout

您可以将此修改为

printf("%5d, ", testScores[i]);
fprintf(fpOut, "%5d, ", testScores[i]);
i+=1;
即,仅在打印到
stdout
和文件后才增加
i

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

printf("%5d, ", testScores[i]);
fprintf(fpOut, "%5d, ", testScores[i++]);
此处在
i++
中,
i
的值将递增,但表达式中将使用
i
的初始值。阅读

而不是自己重复,你可以让电脑用类似

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=0;i<30;i++)的
{
printf(“%5d”,测试分数[i]);
fprintf(fpOut,“%5d”,测试分数[i]);
如果((i+1)%5==0)
{ 
printf(“\n”);
fprintf(fpOut,“\n”);
}
}
仅当
i+1
可被
5
整除时,才打印换行符



不鼓励使用
system()
。请参阅。

如果您未能打开
csis.txt
,则错误消息会产生误导,因为您根本没有打开该文件进行输入。至于您的问题,任何一点都不会有帮助。。。提示:如果
i+=1
,您会将
i
增加多少次?你应该做多少次呢?收到提示,face palm x20,对这个还是比较新的。我不确定是否需要使用某些运算符或特殊语法。谢谢。顺便说一句,
i+=1
完全等同于
++i