2017-01-02 7 views
0

私がしようとしているのは、文字列(この場合は名前)を収集して、文字の要求によって文字を要求するかどうかを質問するループを作成することですもっと挿入してください。適切な取得ループを作ることができない - C

#include <stdio.h> 
#include <string.h> 
void main(){ 
    char c, str[5][20]; 
    int i=0; 
    do { 
     printf("What's your name?\n"); 
     gets(str[i]); 
     i++; 
     printf("Do you want to insert more?\n"); 
     scanf("%c\n",&c); 
    } while (c=='y'); 
} 

私が読み、そのな長さは任意であり、文字列の数Iは、買収のこの種を使用しての「正しい方法」があった場合、ちょうど思っていたとか、私は必要がある場合はトラブルを抱えていないものをそれをあきらめなさい。

+0

それが持っているもの間違った/行方不明の行動を含め、あなたのプログラムの現在の動作を記述してください。しかし、はい、間違いなくあなたが望むことをすることは可能です。一般的なアプローチは、各文字列に対してMAX_LENGTHを選択し、各名前に動的メモリ割り当てを使用することです。 – kaylum

+1

'gets'を使わないでください。セキュリティを含む多くの問題が発生しがちです。代わりに 'fgets'を使ってみてください。 – MateoConLechuga

+0

あなたの質問は何ですか? – melpomene

答えて

-3

これが容易になるの周りにそれを回すとき、: の代わりに、より多くを求めるが、あなたはこのようにそれを行うことができ

#include <stdio.h> 
#include <string.h> 
void main(){ 
     char c, str[5][20]; 
     int i=0; 
     do { 
      printf("What's your name? - (end list with empty string)\n"); 
      gets(str[i]); 
      i++; 
     } while (len(str[i-1] > 0) && (i < 5)); 
    } 
+1

Ugh。 ' 'len'とは何ですか? – DevNull

-3

空の入力を待ちます。

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

int main() { 
    char c[3], str[5][20]; 
    int i = 0; 
    do { 
     printf("What's your name?\n"); 
     if (fgets(str[i], sizeof str[i], stdin)) { 
      // input has worked, do something with data 
      i++; 
     } 
     printf("Do you want to insert more?\n"); 
     if (fgets(c, 3, stdin)) { 
      // input has worked, do something with data 
     } 
    } while (c[0] == 'y'); 
} 

テスト

What's your name? 
Mallory 
Do you want to insert more? 
y 
What's your name? 
Carol 
Do you want to insert more? 
no 

Process finished with exit code 0 
+0

と' sizeof&c'は、必要に応じて 'char'のサイズではないポインタのサイズを与えます。また、バッファのオーバーフローを引き起こす可能性があります。 – kaylum

+0

これは、バッファのアドレス – melpomene

関連する問題