gpt4 book ai didi

计算文件中的字符我找不到问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:16 25 4
gpt4 key购买 nike

为什么这个函数不计算文本中的字符?我在包含 countchars 的主函数中打开文件。文件也是从 countchars 之前的函数打开的,但我在 countchars 结束时关闭它。为什么 fscanf没有 !=EOF 只读取最后一个字母词?

void countchars(FILE *p){
char ch;
int countc=0;
for(;(fscanf(p,"%c",&ch)!=EOF);countc++);
printf("%d",countc);

其余代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getchoice(void);
void inserttextfromfile();
void printtextdata(FILE *);
void countwords(FILE *);
void calculatetextstatistics();
void countchars(FILE *);
int main(){
int a;
while((a=getchoice())){
switch (a){
case 1:
break;
case 2: ;
break;
case 3: ;
break;
case 4: ;
break;
case 5:calculatetextstatistics() ;
break;
case 6: ;
break;
default: break;
}
}


return 0;
}
int getchoice(){
int a;
scanf("%d",&a);
return a;
}

void calculatetextstatistics(){
FILE *p;
p=fopen("mytext.txt","rt");
countwords(p);
countchars(p);
fclose(p);
}
void countwords(FILE *p){
int countw=0;
char wordholder[10]=" ";
char wordlist[60][10];
for (;(fscanf(p,"%s",wordholder))!= EOF;countw++);
printf("%d\n",countw);
return;
}
void countchars(FILE *p){
char ch;

int countc=0;
for(;(fscanf(p,"%c",&ch)!=EOF);countw++);
printf("%d",countw);

}

最佳答案

您读取文件内容的方法效率很低,但应该可行,除非流指针 p 具有无效值,例如 NULL

用于此目的的经典代码是这样的:

#include <stdio.h>

void countchars(FILE *fp) {
int ch;
int countc = 0;
while ((c = getc(fp)) != EOF)
countc++;
printf("%d\n", countc);
}

您的函数失败,因为流已被读取到文件末尾。您可以使用 rewind(fp);fseek(fp, 0L, SEEK_SET); 将文件流重置为文件开头,但并非所有流都可以通过这种方式倒带.例如无法重新启动从控制台读取。

您的单词计数功能已损坏:如果文件中的任何单词超过 9 个字节,则您有未定义的行为。您应该一次读取一个字符并计算从空格字符到非空格字符的转换次数:

#include <ctype.h>
#include <stdio.h>

void countwords(FILE *fp) {
int countw = 0;
int c, lastc = '\n';

while ((c = getc(fp)) != EOF) {
countw += isspace(lastc) && !isspace(c);
lastc = c;
}
printf("%d\n", countw);
}

如果您坚持使用fscanf(),这里有一个替代方案:

void countwords(FILE *fp) {
int countw = 0;
char c, lastc = '\n';

while (fscanf(fp, "%c", &c) == 1) {
countw += isspace((unsigned char)lastc) && !isspace((unsigned char)c);
lastc = c;
}
printf("%d\n", countw);
}

关于计算文件中的字符我找不到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com