文件写入意外输出

时间:2013-04-20 05:15:26

标签: c file-io whitespace

我制作了这个程序,将文本从文件复制到另一个文件。 结果是,原始文件内容“这是一个测试”                 新文件内容“这是一个测试” 哪个有效,然后我评论了那个部分,并尝试使输出看起来像这样。 我想要的结果,原始文件内容“这是一个测试”                      新文件内容,

"T
h
i
s

i
s

a

t
e
s
t"

由于某种原因,输出是对角线并搞砸了,我几乎可以肯定是因为空白字符搞乱了,所以我试图检查空间,而不是在遇到空格时移动到下一行

#include <stdio.h>

int main(void){
    FILE *fp = fopen("originalfile.txt", "r");
    char buffer[81];
    fgets(buffer, 81, fp);
    fclose(fp);

    //copies the file
    /*
       FILE *fp2 = fopen("newfile.txt", "w");
       fputs(buffer, fp2);
       fclose(fp2);
     */

    //copies but moves to next line after each character
    FILE *fp2 = fopen("newfile.txt", "w");
    int x;
    char z = '\n';
    int a = z;
    printf("%d", z);
    for (x = 0; x < strlen(buffer); x++){
        fputc(buffer[x], fp2);
        int res = fgetc(fp2);
        if(isspace(res) != 0){
            fseek(fp2,81,SEEK_CUR);
        } else {
            printf("yeh it got here");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以按如下所示更新循环,将每个字符放在新行上:

for (x = 0; x < strlen(buffer); x++){
    fputc(buffer[x], fp2);
    fputc('\n', fp2);
}

答案 1 :(得分:0)

罗汉的解决方案有效。我在我的机器上测试了它,试试这个:

#include <stdio.h>
#include<string.h>
int main(void){
    FILE *fp = fopen("originalfile.txt", "r");
    char buffer[81];
    fgets(buffer, 81, fp);
    fclose(fp);

    FILE *fp2 = fopen("newfile.txt", "w");
    int x;
    for (x = 0; x < strlen(buffer); x++){
        fputc(buffer[x], fp2);
        fputc('\n', fp2);
    }
    return 0;
}