鱼C论坛

 找回密码
 立即注册
查看: 1024|回复: 1

[已解决]求助大佬一个fgets()的问题

[复制链接]
发表于 2021-3-9 10:13:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdlib.h>
#include<stdio.h>
int main()
{
    FILE *fp;
    char ch[20];
    fp = fopen("C:\\Users\\yyp\\Desktop\\t2.txt","at+");
    if(fp == NULL)
    {
        printf("ERROR\n");
        exit(0);
    }
    else
    {
        printf("Reading text in txt2:\n");
        while((fgets(ch,10,fp)) != NULL)//fgets()作用为:从fp中读取字符并且存储到字符数组ch之中去
        {
            printf("%s",ch);
        }
        printf("\n");
    }
    fclose(fp);
    return 0;
}

大佬们,帮忙看看

代码如上,fgets(str,n,fp); 这个函数里面的n意思不是从文件中读取n个字符吗,我取得n是10,那应该是读取9个字符到ch中并且输出呀。

我文档里的内容是这样的 adf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbb
最佳答案
2021-3-9 10:54:04
本帖最后由 jackz007 于 2021-3-9 10:58 编辑
#include<stdio.h>
int main(void)
{
        FILE * fp                            ;
        char ch[20]                          ;
        if((fp = fopen("C:\\Users\\yyp\\Desktop\\t2.txt","r")) != NULL) {
                fgets(ch , 10 , fp)          ;
                while(! feof(fp)) {
                        printf("%s\n" , ch)  ;
                        fgets(ch , 10 , fp)  ;
                }
                fclose(fp)                   ;
        } else {
                fprintf(stderr , "ERROR\n")  ;
        }
}
        通过这个代码,你会发现,确实是每次读取了 9 个字符。
        编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb

D:\0002.Exercise\C>
        如果希望照原样打印文件内容
#include<stdio.h>
int main(void)
{
        FILE * fp                            ;
        char ch[20]                          ;
        if((fp = fopen("C:\\Users\\yyp\\Desktop\\t2.txt","r")) != NULL) {
                fgets(ch , 10 , fp)          ;
                while(! feof(fp)) {
                        printf("%s" , ch)    ;
                        fgets(ch , 10 , fp)  ;
                }
                fclose(fp)                   ;
                printf("\n")                 ;
        } else {
                fprintf(stderr , "ERROR\n")  ;
        }
}
        编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
adf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf21234
2131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaab
bb

D:\0002.Exercise\C>x >
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-9 10:54:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-3-9 10:58 编辑
#include<stdio.h>
int main(void)
{
        FILE * fp                            ;
        char ch[20]                          ;
        if((fp = fopen("C:\\Users\\yyp\\Desktop\\t2.txt","r")) != NULL) {
                fgets(ch , 10 , fp)          ;
                while(! feof(fp)) {
                        printf("%s\n" , ch)  ;
                        fgets(ch , 10 , fp)  ;
                }
                fclose(fp)                   ;
        } else {
                fprintf(stderr , "ERROR\n")  ;
        }
}
        通过这个代码,你会发现,确实是每次读取了 9 个字符。
        编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb
adf212342
131aaabbb

D:\0002.Exercise\C>
        如果希望照原样打印文件内容
#include<stdio.h>
int main(void)
{
        FILE * fp                            ;
        char ch[20]                          ;
        if((fp = fopen("C:\\Users\\yyp\\Desktop\\t2.txt","r")) != NULL) {
                fgets(ch , 10 , fp)          ;
                while(! feof(fp)) {
                        printf("%s" , ch)    ;
                        fgets(ch , 10 , fp)  ;
                }
                fclose(fp)                   ;
                printf("\n")                 ;
        } else {
                fprintf(stderr , "ERROR\n")  ;
        }
}
        编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
adf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf21234
2131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaabbbadf212342131aaab
bb

D:\0002.Exercise\C>x >
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 09:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表