C语言元音辅音统计程序无法保存文本写入内容问题求助
C语言文件读写及元音辅音统计问题修复
现有代码问题点
- 未写入用户输入到文件:通过
fgets拿到用户输入内容后,没有调用写入接口将内容写入已打开的文件,导致内容无法保存。 - 文件名不匹配:首次打开的文件名为
arquivoapenas.txt,读取时错写为带空格的arquivo apenas.txt,无法定位到目标文件。 - 文件操作流程错误:首次打开的文件写入完成后未调用
fclose关闭,直接重新赋值文件指针造成资源泄漏,同时缓冲区内容未刷入磁盘也会导致写入丢失。 - while循环语法错误:
while(fgets(c, 20, arq) != NULL);末尾多了分号,导致循环体为空,遍历文件内容的逻辑完全失效。 - 统计逻辑缺陷:统计动作放在循环外,只会统计最后一次读到的内容;且未判断字符是否为英文字母,空格、数字、标点等非字母字符会被误统计为辅音。
修复后代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main() { FILE *arq; char c[80]; int consoantes = 0, vogais = 0, i, k; // 打开文件用于写入,需保留原有内容可将w改为a arq = fopen("arquivoapenas.txt", "w"); if(arq){ printf("informe qualquer coisa ae:\n"); fgets(c, 80, stdin); // 将用户输入写入文件 fputs(c, arq); // 关闭文件,将缓冲区内容刷入磁盘 fclose(arq); } else{ printf("não foi possivel criar o arquivo\n"); return 1; } system("pause"); // 打开正确文件名读取内容 arq = fopen("arquivoapenas.txt", "r"); if(arq == NULL){ printf("无法打开文件读取\n"); return 1; } // 去掉末尾多余分号,循环读取每行内容 while(fgets(c, 80, arq) != NULL){ printf("%s", c); k = strlen(c); for(i = 0; i < k; i++){ // 非字母字符跳过统计 if(!isalpha(c[i])){ continue; } // 统一转小写减少case数量 switch(tolower(c[i])){ case 'a': case 'e': case 'i': case 'o': case 'u': vogais++; break; default: consoantes++; } } } printf("\nVogais: %d\n", vogais); printf("Consoantes: %d\n", consoantes); fclose(arq); return 0; }
内容的提问来源于stack exchange,提问作者Beto
相关产品推荐
相关产品推荐

