#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 80
typedef struct Node{
char *data;
struct Node *next;
}Node;
int get_Line(FILE *fp, char s[], int lim);
Node* addNode(Node *front, char *data);
Node* fillList(Node *front, char *txtFile, int lim);
int main() {
Node *dataFront = NULL;
dataFront = fillList(dataFront,"data.txt",MAXLINE);
printf("%s\n",dataFront->data); //prints blank line
return 0;
}
int get_Line(FILE *fp, char s[], int lim){
int c, i;
for (i = 0; i < lim-1 && (c=getc(fp)) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
Node* addNode(Node *front, char *data){
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if(front!= NULL)
newNode->next = front;
front = newNode;
return front;
}
Node* fillList(Node *front, char *txtFile, int lim){
FILE *fp = fopen(txtFile,"r");
char data[lim];
while(get_Line(fp,data,lim) > 0){
front = addNode(front, data);
printf("%s\n",front->data); //prints the string member of Node
//front just fine
}
printf("%s\n",front->data); //prints blank line
fclose(fp);
return front;
}
私は、テキストファイルから行を読み取って文字列を含むノードのリストを作成しています。テキストファイルは何でもかまいません。私のノードのStringメンバーは、作成後に空白行を印刷するのはなぜですか?
printステートメントをfillList関数に入れて、デバッグに役立てます。関数fillListのprint-> whileループ内のデータは機能しますが、whileループの外側では空白行が出力されます。メイン印刷では、文字列メンバも空白行を与えます。私はこれを修正するための助けが必要です。オフの私のデバッグget_LineとaddNodeうまく動作します。
EDIT 1: 私のテキストファイル - data.txtをは - txt file screenshot - - 以下のテキストが含まれて私の出力は、このJPEGで見ることができます。 output screenshot
あなたのプログラムの出力は?空白行の意味を正確にはわかりません。データの前、後、に来るのでしょうか?それとも唯一のものが印刷されているのでしょうか?プログラムの出力を含めるように質問を更新する必要があります。 –
あなたのファイルは本当にありません;最後に2つの '\ n'が含まれていますか?また、あなたのコードに**大きな**問題があります。 – coderredoc
'newNode-> data = strdup(data)'はいくつかのUBを修正します – pm100