【问题标题】:print an int array in a file in C在 C 中的文件中打印一个 int 数组
【发布时间】:2015-03-31 17:45:34
【问题描述】:

我需要用学生和每个人的成绩写一个文件(不是二进制文件)(这个表格下的int note[10])。我没有收到任何错误,但是当我尝试编写文件时,只打印了最后一个成绩,我不知道如何打印整个列表。例如(int nr_note 表示学生有多少成绩)如果学生的成绩是 6、8、9,它只打印 9。 先感谢您。

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

struct student{
    int nr_matricol;
    char nume[10];
    int nr_note;
    int note[10];
};

void citire_date(struct student *studenti, int n, FILE *f){
    int i, j;

    for(i=0;i<n;i++){
        printf("Studentul %d\n", i+1);
        printf("Numarul matricol: "); scanf("%d", &(studenti+i)->nr_matricol);
        printf("Numele studentului: "); fflush(stdin); gets((studenti+i)->nume);
        printf("Numarul de note: "); scanf("%d", &(studenti+i)->nr_note);
        for(j=0;j<((studenti+i)->nr_note);j++){
            printf("Nota %d: ", j+1); scanf("%d", &(studenti+i)->note[i]);
        }
        fprintf(f, "Numar matricol: %d\nNume: %s\nNote: %d \n", ((studenti+i)->nr_matricol) ,((studenti+i)->nume), ((studenti+i)->note[i]));
    }
}

int main()
{
    struct student studenti[20];
    FILE *f;
    int n;

    f = fopen("studenti.txt", "w");
    if(f==NULL){
        printf("Nu s-a putut deschide/crea fisierul pentru scriere.");
        exit(1);
    }

    printf("Introduceti numarul de studenti: "); scanf("%d", &n);
    citire_date(studenti, n, f);
    fclose(f);


    return 0;
}

【问题讨论】:

  • fflush(stdin) 是未定义的行为,fflush() 只能在输出流中使用,您还应该使用数组语法来处理 studenti
  • 如果我不使用 fflush() 它会读取“Numar matricol”,然后直接跳转到“Numarul de note”,它不会让我读取“Nume”
  • 函数gets()有很多问题,一个主要问题是它允许输入缓冲区的缓冲区溢出。建议使用:fgets()
  • @OlarAndrei 使用函数来正确清除输入缓冲区,在输入流上使用fflush()未定义的行为,它不会做你最期望它做的事情时间。
  • 在调用 scanf()(和系列)函数时,应始终检查返回值以确保输入/转换操作成功。

标签: c arrays file int


【解决方案1】:

像这样改变citire_date()函数:

void citire_date(struct student *studenti, int n, FILE *f){
int i, j;

for(i=0;i<n;i++){
    printf("Studentul %d\n", i+1);
    printf("Numarul matricol: "); scanf("%d", &(studenti+i)->nr_matricol);
    printf("Numele studentului: "); fflush(stdin); gets((studenti+i)->nume);
    printf("Numarul de note: "); scanf("%d", &(studenti+i)->nr_note);
    for(j=0;j<((studenti+i)->nr_note);j++){
        printf("Nota %d: ", j+1); scanf("%d", &(studenti+i)->note[j]);
    }
    fprintf(f, "Numar matricol: %d\nNume: %s\n", ((studenti+i)->nr_matricol) ,((studenti+i)->nume) );
    // Printing the notes
    for(j=0;j<((studenti+i)->nr_note);j++){
        fprintf(f, "Note: %d = %d \n", j+1, ((studenti+i)->note[j]));
    }
}

}

你需要使用循环来打印所有的笔记。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2011-07-07
    • 2018-03-03
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多