###前提・実現したいこと
C言語を用いて、ファイル入力で読み込んだテキストに行番号を付けるプログラムをgetline関数を用いて作り、同じプログラムをfgetsで入力しても実行できるようにしたいのですが、上手くいきません
###発生している問題・エラーメッセージ
正しい実行結果は、
1 apple 2 banana 3 character 4 doctor 5 elephant 6 firefighter 7 giant 8 My_name_is_Tarou_Satou 9 Python
上記のような形なのですが、
1 apple 2 banana 3 charact 4 er 5 doctor 6 elephan 7 t 8 firefig 9 hter 10 giant 11 My_name 12 _is_Tar 13 ou_Sato 14 u 15 Python
このようになってしまいます。
###該当のソースコード
#【getlineで作ったソース】
#include<stdio.h> #include<stdlib.h> int main(){ FILE* fr = fopen("abc.txt","r"); //読み込みファイル if(fr==NULL){perror("ReadFileOpenError"); return 0;} FILE* fw = fopen("xyz.txt","w"); //書き出しファイル if(fw==NULL){perror("WriteFileOpenError"); return 0;} size_t sz = 16; char *str = (char*)malloc(sz); if (str == NULL) sz = 0; int i=1; while (getline(&str, &sz, fr) != -1){ fprintf(fw,"%6d %s",i,str); i++; } }
#【fgetsで作っているソース】
#include <stdio.h> #include <stdlib.h> int main() { FILE* fr = fopen("abc.txt","r"); //読み込みファイル if(fr==NULL){ perror("ReadFileOpen");return 0;} FILE* fw = fopen("def.txt","w"); //書き込みファイル if(fw==NULL){ perror("WriteFileOpen");return 0;} size_t sz = 16; //文字列のサイズ char* str = (char*)malloc(sizeof(char)*(sz+1)); //読み込み文字列格納用 if(str==NULL){ sz=0; } int line=1; //行番号 while(fgets(str,sizeof(str),fr) != NULL){ fprintf(stdout,"%6d ",line); fputs(str,stdout); line++; } free(str); fclose(fw); fclose(fr); }
《abc.txt》
apple
banana
character
doctor
elephant
firefighter
giant
My_name_is_Tarou_Satou
Python
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー