每次调用该函数时,Printf 都会更改输出

时间:2021-01-31 13:51:23

标签: c

所以,我有一个 C 程序可以做一些事情。一,它打印一个从文件中读取的矩阵。

我的问题:一些非常具体的 printfs 在被调用时经常不显示,有时它们只打印它们应该打印的部分内容,有时它们完全打印。

打印矩阵

这是一个 5x5 矩阵,有时打印得很好,有时只打印 2 行,有时不打印任何内容。此函数由接受用户输入的菜单调用。

void imprimirMapa(TipoLote matrizLotes[][COL], FILE *fptr) {
    fptr = fopen("../mapa.bin", "rb");

    fread(matrizLotes, sizeof (TipoLote), LIN*COL, fptr);

    for (int i = 0; i < LIN; i++) {
        for (int j = 0; j < COL; j++) {
            fflush(stdout);
            printf("%s", matrizLotes[i][j].reservaAtual.alojamento);
            printf("%c", matrizLotes[i][j].reservaAtual.eletricidade);
            printf("%c", matrizLotes[i][j].reservaAtual.numeroCampistas);
            printf("\t");
        }
        printf("\n");
    }

    fclose(fptr);
}

根本不打印

这只是一些用于用户输入的基本 printfs,前 2 个 printf 根本不打印,但它仍然需要用户输入,当我注册用户输入时,第三个 printf 已经可以正常工作了。

 fread(matrizLotes, sizeof(TipoLote), LIN*COL, fptr);

 fflush(stdout);

 printf("********** Registar uma Reserva **********\n");

 printf("Escolha um lote a reservar (linha)\n");
 scanf("%d", &linha);
 printf("Escolha um lote a reservar (coluna)\n");
 scanf("%d", &coluna);

正在创建矩阵

int main() {
    setlocale(LC_ALL, "Portuguese");

    char vazio[2] = ".";

    FILE *fptr;

    TipoLote matrizLotes[LIN][COL] = {};

    fptr = fopen("../mapa.bin", "rb+");

    for (int i = 0; i < LIN; i++) {
        for (int j = 0; j < COL; j++) {
            strcpy(matrizLotes[i][j].reservaAtual.alojamento, vazio);
            strcpy(&matrizLotes[i][j].reservaAtual.eletricidade, vazio);
            strcpy(&matrizLotes[i][j].reservaAtual.numeroCampistas, vazio);
        }
    }
    
    fwrite(matrizLotes, sizeof(TipoLote), LIN * COL, fptr);
    imprimirMenu(matrizLotes, fptr);

    fclose(fptr);


    return 0;
}

我正在使用 minGW 编译器在 CLion 中运行此代码。

0 个答案:

没有答案