2017-12-17 13 views
1

コードは実行時に文字列を入力することですが、コードは前述のサイズのnより小さい文字列を受け入れますか?エラーはどこですか?ループ長の問題の場合

仮定するN = 3が、ループは二回だけ実行されては、このように、入力としてのみ2つの文字列を取るのn-1倍、すなわち

int main(){ 
    int n; 
    cin>>n; 
    char str[n][100]; 
    for(int i=0;i<n;i++) 
    { 
    char c; 
    int j=0; 
    while((c=getchar())!='\n') 
    { 
     str[i][j++] = c; 
    } 
    str[i][j] ='\0'; 
    } 
} 
+0

これは[プログラムのデバッグ方法を学ぶ]良い機会です(https://ericlippert.com/2014/03/05/how-to-debug-small-programs)。 /)。 –

+0

@Someprogrammerdudeコンパイラが警告またはエラーのいずれかを表示していない –

+0

@SrjSunny実際の問題は何ですか?質問はビットcです怒っている。コードは一見正しいと思われます。 – pepperjack

答えて

0

それは(あなたがnを満たしたときから)\nリターン文字を読んでいると、最初の文字列を空にします。入力を終わらせるための最初のテストの前に別のgetchar()を実行して、それを取り除くだけです。

堅牢性については、cin.ignore(INT_MAX);cin.clear();cin.sync();を試すこともできます。

例(私のコンパイラは、構文の一部を好きではないので、私はそれをやり直す必要があった、新しいgetcharに焦点を当てる:

int main() { 
    int n; 
    cin >> n; 
    char** str = new char*[n]; 
    for (int i = 0; i < n; i++) 
     str[i] = new char[100]; 

    getchar(); 

    for (int i = 0; i<n; i++) 
    { 
     char c; 
     int j = 0; 
     while ((c = getchar()) != '\n') 
     { 
      str[i][j++] = c; 
     } 
     str[i][j] = '\0'; 
    } 

    for (int i = 0; i < n; i++) 
     delete[] str[i]; 
    delete[] str; 
} 

(はい、私はちょうど、私が離れてhttp://wiki.c2.com/?ThreeStarProgrammerから1つ星だ知っています)

+0

たくさん助けたが、それがnではないループANGのGETCHAR外で宣言することは、ループ内にあると私はCを読んでいないのnよ、あなたはそれを@SrjSunnyとは何の関係もない、 –

+0

を詳しく教えてください。 'cin >> n 'を実行すると、' while((c = getchar())!=' \ n ') 'によって読み込まれた' ] '空。 – pepperjack

+0

今、私はそれを得る、ありがとう、なぜあなたは別のgetchar()を使ったのですか?ループのnの前に '='記号を残す方がいいですか? –