2016-11-21 11 views
1

文字配列を関数に渡して文字列をスキャンするのが難しいです。ここに私の要約コードです:配列を関数に渡して文字列をスキャンする

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

#define SIZE 20 


void GetWord(char word[]); 

main(void){ 

    char word[SIZE]="     "; 
    GetWord(word); 

    } 

void GetWord(char word[]){ 

    printf("Please enter a word: "); 
    scanf("%s", word); 

    } 

任意のサイズのエントリが作成された後、関数は単純にハングアップします。

私はscanfにはより良いオプションがあると理解していますが、それを使用する必要があります。ありがとうございました!

+0

あなたは 'GetWord(char * word)'を意味しますか? – bansi

+0

@Henryあなたのコードに問題は見られません。 –

+0

'main()'の戻り値の型を定義する必要があります。実際に古くてコンパクトなコンパイラでは、それを許しています(C99には明示的な戻り値が必要です)。おそらく、読んだ単語を印刷するべきです。間違いなく、読み込まれた単語のサイズを 'scanf("%19s "、word)'で19バイト+ヌルに制限するべきです。 'scanf()'の戻り値をチェックする必要があります。あなたは「任意のサイズ」と言うとき、「1または2または3または...文字の後」を意味するのか、「サイズが十分に大きいとき(おそらく30または40または60文字)」ですか?初心者は普通ですが、とりわけコンピューティングでは口語でもどちらでも可能です。 –

答えて

-1

ポインタを使用する必要があります。これはうまくいくはずです:

編集:申し訳ありませんが、電話で私はそれをテストできませんでした。

編集2:私は関数の呼び出しを編集しました。そして、主要な関数の中でポインタの宣言を移動したので、グローバル変数は必要ありません。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

#define SIZE 20 

void GetWord(char * secondWord); 

main(void){ 
char * word; 
GetWord(word); 

} 

void GetWord(char * secondWord){ 

    printf("Please enter a word: "); 
    scanf("%s", secondWord); 

    } 
+1

(不完全または完全な)配列型が呼び出し時にポインタ型ではありませんか? –

+0

あなたはすでにポインタの型であるパラメータを渡しているので、*は必要ありませんが、間違っているかもしれません。 – someRandomSerbianGuy

+0

それはそのまま送信するので、関数の定義はとにかくポインタの型を与えます。 – someRandomSerbianGuy

関連する問題