2016-08-14 4 views
-2
 char name; 
    NSMutableArray * student = [NSMutableArray array]; 
    for (int i=0;i<3; i++) 
    { 
     NSLog(@"Add the name of student number", i+1); 
     scanf("%s",&name); 
     [student addObject:@name]; 
    } 
    NSLog(@"The names you entered are\n"); 
    for(int i= 0; i<3; i++) 
    { 
     printf("%s\n", [student objectAtIndex:i]); 
    } 

名前を配列に追加できないため、addobjectでエラーが発生し、プログラムがnulを保存するだけです。手伝って頂けますか?変更可能な配列にオブジェクトを追加しようとしましたが、エラーが表示されました

+1

これを後で見つけ、何がうまくいくかを理解するための回答を受け入れることを検討する必要があります。 @CRDを受け入れることをお勧めします。これはまた、ユーザ入力から 'char'を得る良い方法を提供します。 – danh

答えて

1

は、最初の2つの問題を、持っている:

char name; 
... 
scanf("%s",&name); 

これは、より多くの可能性が高いが、遅かれ早かれの問題を引き起こして、あなたの記憶の上にすべて記述します。 namecharという変数に定義しました.1文字を保持していて、そのアドレスをscanfに渡します。文字列のアドレスは、配列の文字列です。

char name[MAX_STRING_SIZE+1]; 

、次に何を最も簡単:scanf機能は喜んであなたが好きなname何かを宣言する必要があり

など、nameにメモリに続くものの上に第二の文字列の最初の文字を書きます文字列を読み込むために、おそらくfgetsを使用することです:

fgets(name, MAX_STRING_SIZE, stdin); 

これはあなたのバッファサイズを超えないことが保証されますよう。

次の問題は、@(name)であるはずの@nameを使用して、C文字列をNSStringに変換しようとしていることです。しかし、有効ではありますが、期待通りのことはしません。nameは、Cの整数型であるので、NSNumberが生成されます。

C文字列をNSStringに変換するには、NSStringメソッドinitWithCString:encoding:を使用します。

HTH

+0

最初の文字入力(OPの目的と思われる)を取得するには、NSStringコンストラクタに渡す前にnull、 'name [1] = 0;'を追加する価値があります。 – danh

+0

@ダン - 私はOPが学生の名前を読んでいると思う... – CRD

+0

あなたの良い説明のためのUpvote – user3182143

1

NSStringとしてcharを「囲む」簡単な方法は、stringWithFormat:コンストラクタを使用することです。

// replace [student addObject:@name]; which contains a syntax error 
NSString *nameString = [NSString stringWithFormat:@"%c", name]; 
[student addObject:nameString]; 
+0

ありがとう!それは私のために働いた。 – BananaEngineer

+0

この回答がうまくいく場合は、これを受け入れてください。 – user3182143

+0

合意、@ user3182143。ありがとう。 OPに関する私のコメントを参照してください。 – danh

関連する問題