2017-01-04 13 views
-3
char type; 
printf("What type of sort would you like to perform?\n"); 
scanf("%s", &type); 
switch(type) 
{ 
case 'bubble': 
    bubble_sort(); 
case 'selection': 
case 'insertion': 
default: 
    printf("invalid input\n"); 
} 

ユーザの入力に基づいて、バブル、選択、または挿入ソートのいずれかでリストをソートするプログラムを作成しようとしています。文字列入力を使用したswitch文

私はそうするためにスイッチケースを使用する必要があります。

switch文の前に変数 "type"を定義してから、それを "bubble"、 "selection"、 "insertion"のいずれかに割り当てるためにscanf関数を使用しました。

しかし、私がコードを実行して "バブル"を入力すると、私のbubble_sort関数(ここでは表示されていません)が実行されず、代わりにデフォルトの場合になります。

この問題を解決するにはどうすればよいですか?

「char」が「type」変数を定義する正しい方法であるかどうか、またはswitch文を1文字でのみ使用できるかどうかについては少し不確定です。

また、私のコードが正しくフォーマットされていない場合、私はこのサイトを初めて知り、謝罪します。

この質問に情報を追加する必要がある場合はお知らせください。

+0

まずの%cを使用して1つの文字をスキャンすることができますので、あなたは(bubble_sort '後の' break'が必要)。それ以外の場合は次の場合に落ちる。第二に、これは実際にコンパイルされますか? Cの文字列は二重引用符で囲む必要があります。そして、あなたは 'switch'で文字列を使うことはできません。 –

+1

ブレークを追加しましたが、同じ問題が引き続き発生します。それはコンパイルします – Sapphira

+0

コンパイラの警告を深刻に受けてください。警告が発行されなくなるまでコードを修正してください。* sigh * – alk

答えて

1

C言語の文字列はポインタ型なので、文字列の値をswitch文やif文に入れようとすると、実際には2つのポインタを比較しているだけで、それらが指している値ではありません。

あなたはそれがこのようなもののようになります、実際にそう

指されているものを比較することstrcmpまたはstrncmpのような機能を必要とします。

char type[200]; 
printf("What type of sort would you like to perform?\n"); 
scanf("%199s", type); 
if (strcmp(type,"bubble")==0) { 
    bubble_sort(); 
} else 
if (strcmp(type,"selection")==0) { 
    something_selection(); 
} else 
if (strcmp(type,"insertion")==0) { 
    something_insetion(); 
} else { 
    printf("invalid input\n"); 
} 
+0

OPのコードに 'printf()'コールの引数の横に文字列がありません。 – alk

+0

これらの機能はどこに追加しますか? – Sapphira

+1

"man strcmp"を試してください – Soren

0

これはCでは不可能です.2つの文字列を比較するには、strcmp()関数を使用する必要があります。しかし、スイッチケースに機能を追加する方法はありません。

1

型がCHARで、スイッチは、単一の文字を使用することができ、あなたの代わりに%sの

char type; 
printf ("What type of sort would you like to perform?\n"); 
printf ("Enter b for bubble\n"); 
printf ("Enter s for selection\n"); 
printf ("Enter i for insertion\n"); 
scanf (" %c", &type); 
switch (type) 
{ 
    case 'b': 
     bubble_sort(); 
     break; 
    case 's': 
     selection_sort(); 
     break; 
    case 'i': 
     insertion_sort(); 
     break; 
    default: 
     printf("invalid input\n"); 
} 
関連する問題