#include<stdio.h> #include<string.h> int main() { FILE *f1,*f2; f1=fopen("text1.dat","r"); f2=fopen("text2.dat","w"); int len,i; char str1[100],str2[100]; while(fgets(str1,100,f1)!=NULL) { len=strlen(str1); for(i=0;i<len;i++) { str2[i]=str1[len-i]; } fputs(str2,f2); fputc('\n',f2); } return 0; }这个程序为什么无法达成以下的功能?应该怎么改?【问题描述】 对于一个文本文件text1.dat,编写一个程序,将该文件中的每一行字符颠倒顺序后输出到另一个文本文件text2.dat中。 【输入形式】 输入文本文件为当前目录下的text1.dat,该文件含有多行任意字符,也可能有空行。每个文本行最长不超过80个字符。在最后一行的结尾也有一个回车符。 【输出形式】 输出为当前目录下的文本文件text2.dat。 【样例输入】 设输入文本文件text1.dat为: This is a test! Hello, world! How are you? 【样例输出】 输出文本文件text2.dat为: !tset a si sihT !dlrow ,olleH ?uoy era woH 【样例说明】 将输入文件反序输出。
时间: 2024-03-23 21:37:20 浏览: 60
这个程序无法达成颠倒每一行字符的功能是因为在颠倒字符时,程序将每一行的回车符也颠倒了,导致输出文件中每行的最后一个字符是回车符,而不是字符本身。此外,程序颠倒字符的方法也不正确。
为了改正这个问题,可以在颠倒每一行字符之前,先将回车符去掉,然后再将颠倒后的字符写回输出文件,并在每一行的最后添加回车符。修改后的程序如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
FILE *f1, *f2;
f1 = fopen("text1.dat", "r");
f2 = fopen("text2.dat", "w");
if (f1 == NULL || f2 == NULL) {
printf("Failed to open the file.\n");
return 1;
}
char str1[100], str2[100];
while (fgets(str1, 100, f1) != NULL) {
int len = strlen(str1);
if (str1[len-1] == '\n') { // 去掉回车符
str1[len-1] = '\0';
len--;
}
for (int i = 0; i < len; i++) {
str2[i] = str1[len-i-1]; // 颠倒字符
}
str2[len] = '\0'; // 添加字符串结尾符
fputs(str2, f2); // 写回输出文件
fputc('\n', f2); // 添加回车符
}
fclose(f1);
fclose(f2);
return 0;
}
```
这样,程序可以正确地将输入文件中的每一行字符颠倒顺序后输出到输出文件中。
阅读全文