首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何调用fgets从file.txt读取不到内容

2013-08-10 
为什么调用fgets从file.txt读取不到内容?#include stdio.h#include string.h#include stdlib.hint m

为什么调用fgets从file.txt读取不到内容?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
        FILE *fp;
        char *str = (char*)malloc(100);
        char string[] = "this is a test";

        if( (fp=fopen("file.txt", "w+")) == NULL)
        {
                printf("open file.txt failed!\n");
                exit(0);
        }
        //fwrite(string, strlen(string), 1, fp);
        //fseek(fp, 0, SEEK_SET);
        while(!feof(fp))
                fgets(str, strlen(string)+1, fp);       //?

        fputs(str, stdout);
        fputc('\n', stdout);
        printf("%s\n", str);

        while(*str)
        {
                char ch = *str;
                if(ch>='a' && ch<='z')
                        *str = ch - 32;

                fputc(*str, fp);
                str++;
        }

        fclose(fp);
        return 0;
}

file.txt内容为:
this is a test


[解决办法]
"w+"
create text file for update, discard previous contents if any
[解决办法]

while (!feof(fp))
{
fgets(str, sizeof(string), fp);
printf("%s\n",str);
}

初次作答:可能是由于windows下每行以\r\n结束,第一遍循环只读到\r第二遍读到了\n,所以只打印了了\n。sizeof(string)+2就可以了。
[解决办法]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
        FILE *fp;
        char *str = (char*)malloc(100);
        char string[] = "this is a test";

        if( (fp=fopen("file.txt", "a+")) == NULL)
        {
                printf("open file.txt failed!\n");
                exit(0);
        }
        fwrite(string, strlen(string), 1, fp);  // 执行完fwrite后必须用 fclose(fp)关闭把数据刷新进去。
fclose(fp);
fp=fopen("file.txt", "a+");
        //fseek(fp, 0, SEEK_SET);
        while(!feof(fp))
{
fgets(str, strlen(string)+1, fp);
fputc('\n', fp);
}
        
        fputs(str, stdout);
        fputc('\n', stdout);
        printf("%s\n", str);

        while(*str)
        {
                char ch = *str;
                if(ch>='a' && ch<='z')
                        *str = ch - 32;

                fputc(*str, fp);


                str++;
        }

        fclose(fp);
        return 0;
}

热点排行