【发布时间】:2019-04-21 03:52:33
【问题描述】:
各位程序员大家好。我在搞清楚这个程序时遇到了很大的问题,我已经坐了几个小时了。这是我需要的。为文件中的每一行计算字符的程序。据我所知,我目前有程序计算和打印行以及打印 A-Z 字符。此外,例如 t 和 T 之间也没有区别,因此程序都算作 T。这是我编写的代码。
输入:嗨是我
输出:H - 1,I - 2,T - 1,S - 1,M - 1,E - 1
但它也会为不存在的字符打印 0。例如 A - 0 等。
int main()
{
FILE *fr;
char *fname, a='A',b;
int line = 1, lines=1,i=0,counter=0,z=0;
//Scans file name & open it
scanf("%s",fname);
fr = fopen(fname,"r");
//print out first line
printf(" ");
for (;a<='Z';a++) {
printf(" %c",a);
}
printf("\n");
//calculate how many lines file has
while (fscanf(fr,"%c",&b) != EOF) {
if (b == '\n') {
lines++;
}
}
//cycle for printing lines
for (;line<=lines;) {
printf("%d ",line);
//check till end of file
while ((fscanf(fr,"%c",&b) != EOF)) {
printf("%c ",a);
//check a-z
for (a='A';a<='Z';a++) {
if (b == a || a+32 == b) {
counter++;
}
else if (b == '\n') {
line++; printf("\n");
}
}
printf("%d ",counter);
counter=0;
}
}
fclose(fr);
return 0;
}
【问题讨论】:
-
它会打印,因为您要求它。将这些打印语句移动到测试
counter的if。 -
但是我会收到例如 A 是否在文件中两次 A - 1 1 而不是 A - 2
-
因为您正在立即打印结果。现在,如果只有某种方法可以将它们存储到某种列表中......
-
我确实尝试过使用数组,这很痛苦,因为我不知道如何告诉它它是新行,所以它应该停止并打印当前行的结果,然后开始计算另一行
-
您忘记倒带文件了。