5

こんにちは、逆配列コードを実装しようとしていますが、うまくいかないようで、その理由が本当にわかりません。For ループが機能していないようです。ロジックが私にはかなり正しいように見えるので、理由はわかりません。

#include <stdio.h>
#include <string.h>

void reverse(char, int);

int main()
{
    char a[100];
    gets(a);

    reverse(a, strlen(a)-1);

    printf("%s\n",a);
    getchar();
    getchar();
    getchar();
    return 0;
}

void reverse(char ar[], int n)
{
    char c;
    int i = 0;
    printf("n = %d" , n);
    for ( i = 0; i >= n ; i++){
        c = ar[i];
        ar[i] = ar[n];
        ar[n] = c;
        printf("Processed");
        n--;}

}


/*
if (begin >= n)
return;

c          = *(x+begin);
*(x+begin) = *(x+n);
*(x+n)   = c;
offs = x++;
printf("Begin = %d   ,  n = %d, offs = %p  \n", begin, n, offs);
reverse(x, ++begin, --n); */
4

5 に答える 5

5
void reverse(char, int);  //declaration wrong

void reverse(char[], int);
                 ^^^ 

あなたのループ

for ( i = 0; i >= n ; i++) // this fails i=0, n=some size

する必要があります

for ( i = 0; i <= n ; i++)

代わりにgets()useを使用しないでください。fgets()

于 2013-10-11T03:24:57.213 に答える
1

for ループ条件は 'i < n' でなければなりません。とプロトタイプ宣言が一致する必要があります。

于 2013-10-11T03:32:25.107 に答える
0

for ループ条件は 'i < n' でなければなりません。とプロトタイプ宣言が一致する必要があります。

「int n」は配列のサイズです。したがって、「i<=n」は、同じ配列を端から中央に反転させ、さらに中央から上に反転させます。したがって、結果は配列と同じです。「n」を配列サイズの半分にします。

于 2014-01-30T03:32:25.057 に答える