首页 > 解决方案 > 用C在同一个文件中读取和写入

问题描述

我创建了一个文件,用户键入他想要创建的文件的名称和其中的消息,但我需要在此交互之后,它会输出用户键入的内容。我使用 w+ 来完成它,因为它可以读写,但由于某种原因,我没有从文件中得到任何东西。

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

#define MAX 100

int main()
{
char nome_arquivo[MAX];
char mensagem[MAX];
char frase[MAX];

printf("Digite o nome do arquivo: ");
fgets(nome_arquivo, MAX, stdin);

//Remover o \n do final do fgets para que nao aja um quadradro no fim do nome do arquivo
strtok(nome_arquivo, "\n");

FILE *arq = fopen(strcat(nome_arquivo, ".txt"), "r+");

//Frase que vai dentro do arquivo
printf("Digite bastante coisa: ");
fgets(mensagem, MAX, stdin);

fprintf(arq, "%s", mensagem);

//Ler o que foi digitado e contar as ocorrencia de 'A', 'C', 'G' e 'T'
if (arq == NULL)
{
    printf("ERRO");
    system("Pause");
    exit(1);
}
else
{
    printf("\nMensagem dentro do arquivo:\n");
    fscanf(arq, "%s", frase);
    printf("%s\nS",frase);
}
fclose(arq);

}

标签: cfile

解决方案


你需要回到文件的开头来阅读你刚刚写的内容。

在尝试写入arq == NULL 之前,您应该检查是否。

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

#define MAX 100

int main()
{
    char nome_arquivo[MAX];
    char mensagem[MAX];
    char frase[MAX];

    printf("Digite o nome do arquivo: ");
    fgets(nome_arquivo, MAX, stdin);

//Remover o \n do final do fgets para que nao aja um quadradro no fim do nome do arquivo
    strtok(nome_arquivo, "\n");

    FILE *arq = fopen(strcat(nome_arquivo, ".txt"), "w+");

    if (arq == NULL)
    {
        printf("ERRO");
        system("Pause");
        exit(1);
    }

//Frase que vai dentro do arquivo
    printf("Digite bastante coisa: ");
    fgets(mensagem, MAX, stdin);

    fprintf(arq, "%s", mensagem);

//Ler o que foi digitado e contar as ocorrencia de 'A', 'C', 'G' e 'T'
    printf("\nMensagem dentro do arquivo:\n");
    rewind(arq);
    fscanf(arq, "%s", frase);
    printf("%s\nS",frase);
    fclose(arq);
}

推荐阅读