我对最后一个字有疑问,似乎错过了最后一步。
输入:
JXJIAA
输出:
lowercase: 0.00 uppercase: 77.78
什么时候应该是
lowercase: 0.00 uppercase: 100.00?
如果文本文件中有另一行,程序可以正常工作,但是我想让它在没有多余行的情况下工作,我想我与此有关:“while(line [x]!= 10); “但不知道该怎么办? 有什么方法可以改进这段代码。这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fr;
int main (int argc, const char * argv[]){
char line[1024];
double uppercase = 0, lowercase = 0;
int x = 0;
fr = fopen ("PercenUpLow.txt", "rt");
while(fgets(line, 1024, fr) != NULL){
do{
if ((line[x] >= 'A') && (line[x] <= 'Z')){
uppercase += 1;
}else if ((line[x] >= 'a') && (line[x] <= 'z')){
lowercase += 1;
}
x+=1;
}while (line[x] != 10);
printf("lowercase: %0.2f ", (lowercase / x) * 100);
printf("uppercase: %0.2f \n", (uppercase / x) * 100);
lowercase = 0;
uppercase = 0;
x = 0;
}
return EXIT_SUCCESS;
}
示例:
输入:
HeLo
输出:
Uppercase: 50.00 Lowercase: 50.00
答案 0 :(得分:0)
试试这个:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fr;
int main (int argc, const char * argv[]){
char line[1024];
double uppercase = 0, lowercase = 0;
int x = 0;
fr = fopen ("PercenUpLow.txt", "rt");
if (fr == NULL) {
printf ("Can't open file") ;
return EXIT_FAILURE ;
}
while(fgets(line, 1024, fr) != NULL) {
do {
if ((line[x] >= 'A') && (line[x] <= 'Z')){
uppercase += 1;
}else if ((line[x] >= 'a') && (line[x] <= 'z')){
lowercase += 1;
}
x+=1;
} while (line[x] != '\n' && line[x] != 0);
printf("lowercase: %0.2f ", (lowercase / x) * 100);
printf("uppercase: %0.2f \n", (uppercase / x) * 100);
lowercase = 0;
uppercase = 0;
x = 0;
}
return EXIT_SUCCESS;
}
我更改了这一行:
} while (line[x] != '\n' && line[x] != 0);
如果文件未被\n
终止,那么最后一行读取也不会被\n
终止(似乎很明显),并且您正在阅读比行结尾更远的行,未定义的行为。
我还测试文件是否可以正确打开。
您一定要学习如何使用调试器。