Я сканирую символы из входного файла и пытаюсь напечатать, сколько раз они встречаются в выходном файле.
Я пытался создать новый файловый поток исключительно для цикла, так как он использовался в предыдущем разделе кода. Я также попытался привести long long int
к массиву и оператору печати, что дало мне только большие числа.
FILE* input;
FILE* output;
input = fopen("input.txt", "r");
output = fopen("report.txt", "w");
...
char letterTemp;
float letterMax;
int upperCounter = 0;
int lowerCounter = 0;
char alphaChars[26];
int charCounter[26];
for (char c = 'a'; c <= 'z'; ++c) {
alphaChars[c - 'a'] = c;
}
for (int i = 0; i < 26; i++) {
fopen("input.txt", "r");
while ((letterTemp = fgetc(input)) != EOF) {
if (alphaChars[i] == letterTemp) {
lowerCounter++;
charCounter[i]++;
}
else if (toupper(alphaChars[i]) == letterTemp) {
upperCounter++;
charCounter[i]++;
}
}
fclose(input);
}
letterMax = lowerCounter + upperCounter;
fprintf(output, "LETTER STATISTICS\n\nCategory How many in file %% of all letters\n----------------------------------------------------------------------\nUppercase%31d%20.2f %%\nLowercase%31d%20.2f %%\n", upperCounter, 100 * upperCounter / letterMax, lowerCounter, 100 * lowerCounter / letterMax);
for (int i = 0; i < 25; i++) {
fprintf(output, "%c%39d%20.2f %%\n", alphaChars[i], charCounter[i], 100 * charCounter[i] / letterMax);
}
Что дало бы мне ...
LETTER STATISTICS
Category How many in file % of all letters
----------------------------------------------------------------------
Uppercase 9 12.16 %
Lowercase 65 87.84 %
a 2080375142 25393028.00 %
b 32766 44278.38 %
c 2080375153 25393042.00 %
d 32767 44279.73 %
e -677299551 13371914.00 %
f 32734 44235.14 %
g 0 0.00 %
h 2 2.70 %
i 7 9.46 %
j 0 0.00 %
k 0 0.00 %
l 7 9.46 %
m 2 2.70 %
n 1 1.35 %
o 7 9.46 %
p 1 1.35 %
q 2081514112 26932176.00 %
r 32770 44283.79 %
s -677300459 13370687.00 %
t 32735 44236.49 %
u 2 2.70 %
v 1 1.35 %
w 2 2.70 %
x 1 1.35 %
y 5 6.76 %
Что здесь происходит?