用C语言打印短于文本文件中单词平均长度的单词
我想把单词打印到屏幕上,它的长度比文本文件中所有单词的平均长度短 我的文本文件:in1feladat.txt 文字如下:用C语言打印短于文本文件中单词平均长度的单词,c,text,C,Text,我想把单词打印到屏幕上,它的长度比文本文件中所有单词的平均长度短 我的文本文件:in1feladat.txt 文字如下: negy ötötö hathat hetheth nyolcnyo 所以平均长度是6(4+5+6+7+8/5=6),所以程序应该写入屏幕:negyötötö 我的txt位于main.c旁边,因此它位于项目文件夹中。 C:\Users\lszima\Desktop\progg\fannikahelp\in1feladat.txt codeblocks返回时出现以下错误: 进
negy
ötötö
hathat
hetheth
nyolcnyo
所以平均长度是6(4+5+6+7+8/5=6),所以程序应该写入屏幕:negyötötö
我的txt位于main.c旁边,因此它位于项目文件夹中。
C:\Users\lszima\Desktop\progg\fannikahelp\in1feladat.txt
codeblocks返回时出现以下错误:
进程终止,状态为-1073741819(0分钟,1秒))
调试:程序接收信号SIGSEGV,分段故障。
0x4013dd第16行,它是while(!feof(f1)
谁能帮帮我,我做错了什么
多谢各位
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f1=fopen("c:\users\lszima\desktop\proggg\fannikahelp\in1feladat.txt","r");
double atlag=0;
int sum=0;
int t[10];
int i=0;
char szo[100];
while(!feof(f1)){
// szavak hossza belerakása a tömbbe
//fscanf(f1,"%s",szo);
fgets(szo,100,f1);
t[i]=strlen(szo);
i++;
}
int j=0;
for (j=0;j<i;j++)
sum+=t[j];
atlag=(double)sum/(i+1);
printf("atlag= %lf",atlag);
fclose(f1);
FILE *f1=fopen("c:\users\lszima\desktop\proggg\fannikahelp\in1feladat.txt","r");
char szavak[100];
while(!feof(f2)){
//fscanf(f2,"%s",szavak);
fgets(szavak,100,f2);
if(strlen(szavak)<atlag)
printf("%s ",szavak);
}
return 0;
}
#包括
#包括
#包括
int main()
{
文件*f1=fopen(“c:\users\lszima\desktop\progg\fannikahelp\in1feladat.txt”,“r”);
双atlag=0;
整数和=0;
int t[10];
int i=0;
char-szo[100];
而(!feof(f1)){
//萨瓦克·霍萨·贝尔拉卡·阿图姆贝
//fscanf(f1,“%s”,szo);
fgets(szo,100,f1);
t[i]=strlen(szo);
i++;
}
int j=0;
对于(j=0;j我找到了另一个更简单的解决方案,非常感谢大家的帮助
干杯
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char szo[50];
int db=0, sum=0;
FILE * fin=fopen("in1feladat.txt","r");
while(fscanf(fin,"%s",szo)!=EOF)
{sum+=strlen(szo);
db++;
}
double avg=sum*1.0/db;
fclose(fin);
fin=fopen("in1feladat.txt","r");
while(fscanf(fin,"%s",szo)!=EOF)
{if(strlen(szo)>avg)
printf("%s\n",szo);
}
fclose(fin);
return 0;
}
#包括
#包括
#包括
int main(){
charszo[50];
int db=0,sum=0;
文件*fin=fopen(“in1feladat.txt”,“r”);
而(fscanf(fin,“%s”,szo)!=EOF)
{sum+=strlen(szo);
db++;
}
双平均值=总和*1.0/db;
财务总监(财务);
fin=fopen(“inafeladat.txt”,“r”);
而(fscanf(fin,“%s”,szo)!=EOF)
{if(strlen(szo)>平均值)
printf(“%s\n”,szo);
}
财务总监(财务);
返回0;
}
对于初学者来说,这总是错误的。正在使用的文本文件的确切内容是什么?使用“代码格式”选项将其粘贴到问题中。现在在调试器中运行该程序。什么时候失败?从该点获取回溯,并将其放在问题中。此外,请正确缩进代码,并在运算符周围留出空格ors。现在它基本上是一个坚实的、不可读的块。除了一些地方没有明显原因的额外空行。检查fopen
的返回值。你必须检查i
是否低于10,为什么不直接计算while循环中的总和。你只需打开文件一次,然后更好地将路径传递给e文件作为命令行参数。强烈建议:而不是第一次调用
fclose(f1),替换为
rewind(f1)`删除对fopen()的第二次调用
强烈建议:遵循公理:*每行只有一条语句,(最多)每语句一个变量声明。这类事情:{sum+=strlen(szo);
使代码更难阅读/理解/调试以便于可读性和理解:1)一致地缩进代码。在每个左大括号“{”之后缩进。在每个右大括号“}”之前缩进。建议每个缩进级别为4个空格。2)单独的代码块(for、if、else、while、do…while、switch、case、default)通过单个空行。此答案仍然无法检查(!=NULL)从fopen()返回的值
以确保操作成功。省略常用的水平间距是模糊C代码的一种方法。这是一种糟糕的编程实践。如果编写的代码可读性很好,代码将完全相同。至少在括号内插入一个空格,在;
(分号)和,
(逗号)之后