1


私の 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 を何度も押す必要があります)。

4

0 に答える 0