在 C 中更改文本文件大小写和复制数据
Change text file case and copy data in C
我正在创建一个程序,它从一个文件复制文本文件数据,并根据选择将其大小写更改为小写或大写,但是当我执行该程序时,我收到以下结果,并且文本大小写没有更改或复制。
#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
▒▒
问题是您使用 fgets
,它从文件中读取字符串。一种更好的方法是使用 fgetc
,它一次只读取一个字符并适当地处理它。
putchar(tolower(fp[i]));
应该会生成编译器警告。确保编译器警告全部启用或考虑使用新的编译器。
上下两处替换
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
返回的所有字符。
打开方式"r"从文件开头读取
// fp = fopen("file1.txt", "a")
fp = fopen("file1.txt", "r");
我正在创建一个程序,它从一个文件复制文本文件数据,并根据选择将其大小写更改为小写或大写,但是当我执行该程序时,我收到以下结果,并且文本大小写没有更改或复制。
#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
▒▒
问题是您使用 fgets
,它从文件中读取字符串。一种更好的方法是使用 fgetc
,它一次只读取一个字符并适当地处理它。
putchar(tolower(fp[i]));
应该会生成编译器警告。确保编译器警告全部启用或考虑使用新的编译器。
上下两处替换
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
返回的所有字符。
打开方式"r"从文件开头读取
// fp = fopen("file1.txt", "a")
fp = fopen("file1.txt", "r");