2017-01-02 4 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. gets는 오버플로 할 수 있습니다 .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