3

私は厄介な(標準ではあるが)問題の厄介な解決策だと思ったものを思いついた:与えられたユーザー入力に対して、単語の文字を逆にする

例えば:

これは標準テストです

になります

sihT si a dradnats tset

ではなく

tset dradnats a si sihT

問題の核心はこのコードです

  while (!iscntrl(user_input[x])) // quit when new line is read
      {
        restart:
        x++;
        puts("first level test");
        if (user_input[x]==' ')
            {
            puts("second level test");
            for (i=x; user_input[i]!=' '; --i)
                {               
                reverse_words[k]=user_input[i];
                k++;
                puts("third level test");
                goto restart;
                }
            }
        }

(はい、私は知っています、そこにはgotoがあります:/)

ただし、ループの3番目のレベルには触れません。

(i=x; user_input[i]!=' '; --i)おそらく、forループパラメータとして完全に何か問題がありますか?

x、、、iおよびkはすべて、最初のループの開始前に整数==0として初期化されます。

4

2 に答える 2

5

さて、あなたの状態はここで矛盾しています:

 if (user_input[x]==' ')
            {
            puts("second level test");
            for (i=x; user_input[i]!=' '; --i)

がスペースの場合にのみ入力user_input[x]しますが、スペースと等しくない限りループします。

于 2012-12-19T21:36:18.813 に答える
2

問題はこのセクションです:

 if (user_input[x]==' ')
            {
            puts("second level test");
            for (i=x; user_input[i]!=' '; --i)
                {               

最初の行で、それを確立しましたuser_input[x]==' '

数行後、間に実行されるループを設定しますuser_input[i]!=' '

ただし、設定i = xしたのは...したがって、最初のパスでは、user_input[x]!=' 'すでに設定した...がfalseである必要があります。

したがって、内部ループは実行されません。

于 2012-12-19T21:37:16.117 に答える