ユーザーが完了を押すまで、ユーザー入力を受け取る簡単なプログラムを作成しようとしています。そして、彼らがそうすると、プログラムは彼らがタイプしたものすべてを出力します。私はそれのほとんどが機能していると感じており、プログラムは正常にコンパイルされますが、入力を入力して完了を押すと、入力を入力した行と同じ数の行が出力されます。私はそれを引き出しました。このコードはうまくいくはずです。また、私はCに非常に慣れていないので、誰かが何が悪いのかを教えてくれたり、提案をくれたりすることができれば.
#include <stdio.h>
#include <stdlib.h>
struct llist {
struct llist* nxt;
char* string;
};
void add(struct llist **tail, char* str) {
struct llist* n_ptr = (struct llist*)malloc(sizeof(struct llist));
(**tail).string = str;
(**tail).nxt = n_ptr;
(*tail) = n_ptr;
n_ptr->nxt = (struct llist*)0;
};
void print(struct llist *Head) {
struct llist* ptr;
ptr = Head;
while(ptr->nxt){
printf("%s\n", ptr->string);
fflush(stdout);
(ptr = (ptr->nxt)); }
}
int main() {
char* line = NULL;
size_t size = 100;
char* done = "done";
struct llist head;
struct llist* tail = (struct llist*)malloc(sizeof(struct llist));
tail = &head;
do {
getline(&line, &size, stdin);
add( &tail , line ) ;
} while ( strncmp(line, done, 4) != 0 );
print(&head);
return 0;
}