2016-10-02 48 views
0

コンソールから文字列を受け取り、配列に格納し、配列の順序を逆にし、逆の文字列を表示するCプログラムを作成しようとしています。 getchar()printf()以外のライブラリ関数は使用できません。私の試みは以下の通りです。プログラムを実行してテキストを入力してEnterキーを押すと、何も起こりません。誰かが間違いを指摘できますか?C文字を配列と逆順に取得するプログラム

#include <stdio.h> 
#define MAX_SIZE 100 

main() 
{ 
    char c;      // the current character 
    char my_strg[MAX_SIZE];  // character array 
    int i;      // the current index of the character array 

    // Initialize my_strg to null zeros 
    for (i = 0; i < MAX_SIZE; i++) 
    { 
     my_strg[i] = '\0'; 
    } 

    /* Place the characters of the input line into the array */ 
    i = 0; 
    printf("\nEnter some text followed by Enter: "); 
    while (((c = getchar()) != '\n') && (i < MAX_SIZE)) 
    { 
     my_strg[i] = c; 
     i++; 
    } 

    /* Detect the end of the string */ 
    int end_of_string = 0; 
    i = 0; 
    while (my_strg[i] != '\0') 
    { 
     end_of_string++; 
    } 

    /* Reverse the string */ 
    int temp; 
    int start = 0; 
    int end = (end_of_string - 1); 
    while (start < end) 
    { 
     temp = my_strg[start]; 
     my_strg[start] = my_strg[end]; 
     my_strg[end] = temp; 
     start++; 
     end--; 
    } 

    printf("%s\n", my_strg); 

} 
+0

...インクリメントされているあなたがループしながら、2番目のを見て、my_stringどこに自分自身を尋ねるべきだと思います一度文字列を配列に読み込み、逆にして表示する。一度に1つずつ取り組み、完璧に動作するまでそれらを結合しようとしないでください。 – Beta

+0

あなたは、それぞれの問題を別々の機能にして、それぞれを別々にテストするようなことを提案していますか?私たちはまだそれほど多くはありませんでしたが、私はそれがより良いアプローチだと確信しています。 – yroc

+0

これを行うこともできますし、別々の*プログラム*を書いて別々にテストすることもできます。私を信じて、それはあなたに多くのトラブルを救うことができます。 – Beta

答えて

2

このwhileループのように思える:

while (my_strg[i] != '\0') 
{ 
    end_of_string++; 
} 

あなたがiをインクリメントする必要があり、my_strg[0]'\0'に等しくない場合そうでない場合、それは無限ループです。 私はブレークポイントを配置し、あなたのコードが何をしているのかを見ることをお勧めします。

+0

あなたはそれを釘付けにしました!私は実際にここに投稿する前に_gdb_で遊んでいましたが、苦労しました。私は教授の要求に従ってIDEで作業しているわけではありません。私たちの教授は、コースの後半(!)でデバッグをカバーする予定だが、最初から正しくカバーするのに十分な話題であるように思える。 – yroc

+0

実際に簡単にデバッグする方法はありません。たとえば、プログラムがスタックされている場所の手掛かりを得るために、 'printf(" Beforeループwhile \ n ");とprintf(" while whileループ "); – peval27

+0

OK、その間に試してみるとよいテクニックです。ありがとう。 – yroc

1

私はあなたはとても三つの問題で解決しようとしている、それがゼロに常にあるように私には見えるので、[i]は

+0

はい、@ peval27も指摘した通りです。ありがとうございました。 – yroc

関連する問題