我正在创建一个程序,它从一个文件复制文本文件数据,并在选择时将其大小写更改为更低或更高,但是当我执行程序时,我收到以下结果,并且不会更改或复制文本大小写。
#include <stdio.h>
int main() {
FILE *fp = NULL;
FILE *fp2 = NULL;
char str[200];
char var;
int i;
char copy;
fp = fopen("file1.txt", "a");
fp2 = fopen("file2.txt", "w");
printf("Enter choice: ");
scanf(" %c", &var);
if (fp != NULL && var == 'L') {
while ( fgets(str, 200, fp) != NULL ) {
putchar(tolower(fp[i]));
i++;
}
puts(str);
}
else if (fp != NULL && var == 'U') {
while ( fgets(str, 200, fp) != NULL ) {
putchar(toupper(fp[i]));
i++;
}
puts(str);
}
else {
printf("ERROR: No proper choice was made \n");
}
while (1) {
copy = fgetc(fp);
if (copy == EOF) {
break;
}
else {
putc(copy , fp2);
}
}
return 0;
fclose(fp);
fclose(fp2);
}
我得到的输出是:
Enter choice: U
▒▒
答案 0 :(得分:0)
问题是你使用fgets
,它从文件中读取一个字符串。更好的方法是使用fgetc
,它一次只读取一个字符并适当地处理它。
答案 1 :(得分:0)
putchar(tolower(fp[i]));
应该生成编译器警告。确保编译器警告全部启用或考虑新的编译器。
替换2个位置,包括上部和下部。
while ( fgets(str, 200, fp) != NULL ) {
putchar(tolower(fp[i]));
i++;
}
// With to iterate over each character
while (fgets(str, sizeof str, fp) != NULL) {
for (i=0; str[i]; i++) {
putchar(tolower(str[i]));
}
}
更改为int
,以便正确区分fgetc()
从EOF
返回的所有字符。
打开&#34; r&#34;从文件的开头读取
// fp = fopen("file1.txt", "a")
fp = fopen("file1.txt", "r");