首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文件中5个字符串的长度

读取文件中5个字符串的长度
EN

Stack Overflow用户
提问于 2021-12-08 10:46:34
回答 2查看 240关注 0票数 0

大家好,我有一个关于代码C的问题:读取包含5个字符串的输入数据(input02.txt),然后将每个字符串的长度写入新文件。文件中的字符串:

代码语言:javascript
复制
Five little
Monkeys jumping
On the bed
One fell off
And bumped his head

这是我的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main(){
    char s[100];
    int m,c=1;
    FILE *fin,*fout;
    fin = fopen("input02.txt", "r");
    fout = fopen("length.txt", "w");
    if (fin!=NULL){
        while(!feof(fin)){ 
            fgets(s, 100, fin);
            m=strlen(s);
            while(c<6){
                fprintf(fout,"Length of %d string: %d\n",c,m);
                c++;
            }
        }
        fclose(fin);
        fclose(fout);
    }
    return 0;
}

但是length.txt文件中的输出如下所示:

代码语言:javascript
复制
Length of 1 string: 12
Length of 2 string: 12
Length of 3 string: 12
Length of 4 string: 12
Length of 5 string: 12

我能得到一些帮助吗,泰

EN

回答 2

Stack Overflow用户

发布于 2021-12-08 10:56:11

考虑一下这个循环

代码语言:javascript
复制
while(c<6){
    fprintf(fout,"Length of %d string: %d\n",c,m);
    c++;
}

它将保持打印和增量c,而不更改仅在外部循环中设置的m值。将while更改为if以修复它,前提是仍然需要限制打印到前5的字符串的数量。(更一般的程序只需读取文件中的任何内容,在这种情况下就不需要条件了。)

(您收到的关于不使用feof作为循环条件的评论仍然有效;也修正了这一点,尽管它与此错误没有直接关系。)

票数 0
EN

Stack Overflow用户

发布于 2021-12-08 10:57:42

目前还不清楚你想用这个内环实现什么。

代码语言:javascript
复制
            while(c<6){
                fprintf(fout,"Length of %d string: %d\n",c,m);
                c++;
            }

它将打印6次相同字符串的长度。

在读取输入行的外部循环的下一个周期中,c的值将已经是6,因此对于第2行或更高版本的输入行,不会再次调用内环。

移除内循环将解决问题。

代码语言:javascript
复制
        while(!feof(fin)){ 
            fgets(s, 100, fin);
            m=strlen(s);
            fprintf(fout,"Length of %d string: %d\n",c,m);
            c++;
        }

除了这个,像这样的循环

代码语言:javascript
复制
    while(!feof(fin)){ 
        /* ... */
    }

总是错误的,因为feof会告诉您,在做了一些输入操作之后,是否到达了EOF。

正如在comment中已经提到的,正确的循环实现是

代码语言:javascript
复制
        while(fgets(s, sizeof s, fin)) {
            m=strlen(s);
            fprintf(fout,"Length of %d string: %d\n",c,m);
            c++;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70273687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档