0

我想在同一个文件中写入、读取和打印。但是当程序执行时,它可以写入但无法读取或打印我写入的数据。当我执行程序时,它在写入文件后停止工作。我已经验证文件(penny.txt)包含写入操作后的数据。

我不知道这是哪里出了问题 - 我如何读取和打印数据?我对此很陌生,所以请在回答时记住这一点。

#include<stdio.h>

int main()
{
    char ch;
    char penny[50],pen[50];
    FILE *Object;
    Object = fopen("Penny.txt","w+");

    fgets(penny, sizeof penny, stdin);
    fprintf(Object,penny);
    fscanf(Object,"%s",pen);
    printf("%s",pen);
    return 0;
}
4

3 回答 3

2

当您调用fscanf(). 用于fseek返回开头:

/* this ignores a whole host of other issues */
fprintf(Object,penny);
/* optional: fflush(Object); */

/* after the call to fprintf you're at the end of the "stream" in this case,
 * go back to the beginning:
 */
fseek(Object, 0, SEEK_SET);

/* now we have something to read! */
fscanf(Object,"%s",pen);
printf("%s\n",pen);

由于完全缺乏错误检查,您没有注意到这个问题。fopen, fprintf, 并且fscanf都列出了错误条件,并且都使用它们的返回值来表示问题。如果忽略这些返回值,后果自负。

于 2013-06-25T19:22:56.463 回答
1
#include<stdio.h>

int main()
{
    //char ch;//unused!
    char penny[50],pen[50];
    FILE *Object;
    Object = fopen("Penny.txt","w+");

    fgets(penny, sizeof penny, stdin);
    fprintf(Object,"%s", penny);//it troubled indicator(%) is included
    fflush(Object);//Buffer flush : So that there is no wrote
    rewind(Object);//rewind the position of access to the file
    fscanf(Object,"%s",pen);
    printf("%s",pen);
    return 0;
}
于 2013-06-25T23:10:18.743 回答
0

您需要使用fseek()将文件在文件中的当前位置移回。

int fseek ( FILE * stream, long int offset, int origin );

重新定位流位置指示器 将与流关联的位置指示器设置为新位置。

stream

指向标识流的 FILE 对象的指针。offset 二进制文件:从原点偏移的字节数。文本文件:零或 ftell 返回的值。

origin

用作偏移参考的位置。它由以下常量之一指定,专门用作此函数的参数:

Constant    Reference position
SEEK_SET    Beginning of file
SEEK_CUR    Current position of the file pointer
SEEK_END    End of file 

*

尝试这个:

#include<stdio.h>

 int main()
    {
        char ch;
        char penny[50],pen[50];
        FILE *Object;
        Object = fopen("Penny.txt","w+");

        fgets(penny, sizeof penny, stdin);
        fprintf(Object,penny);//now the file is in EOF
        fseek(Object,-1*(strlen(penny),SEEK_CUR);//<===move back |penny| in the file
         /* optional or:fseek(Object,0,SEEK_SET);<===move to start of file */
        fscanf(Object,"%s",pen);
        printf("%s",pen);
        return 0;
    }
于 2013-06-25T19:21:04.527 回答