2017-06-09 18 views
0

私はAbsolute Beginner第2版のCプログラミングの第8章チャレンジ3に取り組んでいます。プログラムはアルファベット順に名前の配列をソートすることになっています。あらかじめ定義された名前のリストを並べ替える

私のプログラムは動作しません。 sort()のない主な機能は動作しますが、ソート機能はうんざりです。また、警告メッセージに基づいて、strcmp()が誤って使用されているようです。

私が使用しているコンパイラはgccで、nanoでコードを書いています。

/* Uses strcmp() in a different function 
    to sort a list of names in alphabetical order */ 

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

void sort(char*, int); 

void main() { 
    char strStates[4][11] = { "Florida", "Oregon", "California", "Georgia" }; 
    sort(*strStates, 4); // 4 is the number of string in the array 

    printf("\nFour States Listed in Alphabetical Order\n"); 

    int x; 
    for(x = 0; x < 4; x++) 
     printf("\n%s", strStates[x]); 
} 

void sort(char* strNames, int iStrings) { 
    char strPlaceholder[11] = { 0 }; 
    int x; 
    int y; 

    for(x = 0; x < iStrings; x++) { 
     for(y = 0; y < iStrings - 1; y++) { 
      if(strcmp(strNames[y], strNames[y + 1]) > 0) { 
       strcpy(strPlaceholder, strNames[y + 1]); 
       strcpy(strNames[y + 1], strNames[y]); 
       strcpy(strNames[y], strPlaceholder); 
      } 
     } 
    } 
} 
+0

は、問題の直接あなたのプログラムテキストを含めてください – FieryCat

+5

にあなたのコードを入れてください。コードを編集ボックスにコピーします。 OKを確認し、プレビューを無視してください。次にコードを選択し、ボックスの上にある** '{}' **ボタンを使用してインデントします。今すぐプレビューを確認してください。コピーするコードにタブがないことを確認してください。それはあなたがそれをインデントするときにレイアウトを破壊するでしょう。 –

+0

'sort'の引数の型が正しくありません。 – BLUEPIXY

答えて

0

あなたが答えを得るためのヒントではありません。 char[4][11]のような2次元配列は、char*のような(一連の)文字へのポインタとは異なるものです。

は、次のコードを仮定:

char *s = "Florida"; // lets pointer 's' point to a sequence of characters, i.e. { 'F', 'l', 'o', 'r', 'i', 'd', 'a', '\0' } 
char arr[2][11] = { "Florida", "New York" }; 

arr[1]ような発現は*(arr + 1)*(arr + 11)である、*(arr + sizeof(char[11]))と等価ではないのに対し、そしてs[1]ような表現は、*(s+1)ある、*(s + sizeof(char))と等価です。 "sizeof" -partはコンパイラによって行われ、変数の型から派生します。したがって、タイプchar*の引数は、タイプchar[11]の引数とは異なる動作をします。

次のコードでは、前方にあなたを助けるかもしれない:

void print (char array[][11], int n) { 

    for(int i=0;i<n;i++) 
     printf("%d:%s\n",i,array[i]); 
} 

int main() { 

    char strStates[4][11] = { "aer", "adf", "awer", "aert" }; 
    print (strStates,4); 

    return 0; 
} 
+0

@BLUEPIXY:文字の並びを説明しようとする試みは完全に間違った方法で行われました:-) –

関連する問題