私の C プロジェクトの 1 つで、複数の行を読む必要があります。いくつかの命令のリストを期待しているとしましょう。したがって、入力は次のようになります (もちろん、最大の長さはわかりません)。
1. First do this...
2. After that...
...
n. Finish doing this...
このデータをどこかに(ファイルなどに)保存したいのは、後で多くの同様のリストを検索できるようにしたいからです。
サイクルを使用して一度に1文字を読み取るというアイデアを思いつき、次のコードを作成しました(少し簡略化しました):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
char *stream;
int i=0;
stream = (char *)malloc(sizeof(char));
do{
stream = (char *)realloc(stream,(i+1)*sizeof(char)); // Reallocating memory for next character
stream[i] = getc(stdin); // Reading from stdin
if( i>0 && stream[i-1]=='\n' && stream[i]== '\n' ) // Stop reading after hitting ENTER twice in a row
break;
i++;
}while(1); // Danger of infinite cycle - might add additional condition for 'i', but for the sake of question unnecessary
printf("%s\n", stream); // Print the result
free(stream); // And finally free the memory
return 0;
}
このコードは実際には機能しますが、これは非常に厄介な解決策であるように思えます (ユーザーは、リストを読みやすくするために空白行 '\n' を追加することをお勧めしますが、そこで 'if' 条件を変更した後ENTER を何度も押す必要があります)。