0

私はC言語の本を読んでいましたが、次のコードに固執しました... Cコードを示したように、for()ループを使用して文字を取得しています。また、forループを使用して画面に文字を出力するのと同じ方法です...ユーザーがエンターを押すと、ループが終了し、画面に出力するために使用される他の for() ループが i 変数の値を使用します。しかし、画面上の結果は逆です。どうすればそれを整理できますか?

#include <string.h>
#include <stdio.h>
int main()
{
int i;
char msg[25];
printf_s("Type up to 25 characters then press Enter..\n");
for (i = 0; i < 25; i++)
{
    msg[i] = getchar();// Gets a character at a time
    if (msg[i] == '\n'){
        i--;
        break;// quits if users presses the Enter
    }
}putchar('\n');
for (; i >= 0 ; i--)
{
    putchar(msg[i]);// Prints a character at a time 

}putchar('\n');/*There is something wrong because it revers the input */

getchar();
return 0;
4

2 に答える 2

1

入力後、変数iは の正確な文字数を保持しmsgます。そのため、入力すると i==3 ではなく i==2となるi--ステートメントがあります。ab<enter>

2 番目のループは逆方向に 0 にカウントされますが、これは望ましくありません。i代わりに0 から まで数えたいと思うでしょう。i を使用して i まで数えることはできません。2 つの変数が必要です。1 つは最大値を保持するためのもので、もう 1 つは実際のカウントを行うためのものです。

学習の一部であるため、正確にどのように行うかを決定するのはあなたに任せます。

于 2015-04-02T21:34:02.103 に答える
0

を使用してソートするにqsortは、次のように記述します。

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *, const void *);

int main(void){
    int i, n;
    char msg[25];

    printf_s("Type up to 25 characters then press Enter..\n");
    for (i = 0; i < 25; i++){
        int ch = getchar();
        if(ch == '\n' || ch == EOF)
            break;//if (msg[i] == '\n'){i--; <<- this cannot be 25 character input.
        else
            msg[i] = ch;
    }
    putchar('\n');

    n = i;
    qsort(msg, n, sizeof(char), cmp);//sizeof(char) : 1

    for (i = 0; i < n ; ++i){
        putchar(msg[i]);
    }
    putchar('\n');

    getchar();
    return 0;
}

int cmp(const void *a, const void *b){
    unsigned char x = *(const char *)a;
    unsigned char y = *(const char *)b;
    return (x < y) ? -1 : (x > y);//Ascending order
}
于 2015-04-02T22:32:11.187 に答える