2013-04-30 4 views
3

나는 C 언어를 처음 접했고, 지금은 마스터에게 기본을 시도하고 scanf에서 배열로 데이터를 읽는 데 문제가있다.C : scanf from array

는 현재 코드는 다음과 같습니다

int main() 
{ 
    int array[11]; 
    printf("Write down your ID number!\n"); 
    scanf("%d", array); 
    if (array[0]=1) 
    { 
     printf("\nThis person is a male."); 
    } 
    else if (array[0]=2) 
    { 
     printf("\nThis person is a female."); 
    } 
    return 0; 
} 

당신이 볼 수 있듯이,이 프로그램의 목표는 ID를 요청 해, 지정된 사람이 남성인지 첫 번째 숫자에서 결정하는 것입니다 (1) 또는 여성 (2). 그러나 배열이 제대로 채워지지 않았기 때문에 제대로 작동하지 않는 것 같습니다 (scanf (배열) 바로 다음에 임의의 숫자가 표시됨). 이 프로그램을 실행하면 어떤 번호를 입력했는지 상관없이 그 사람이 남성이라는 결과가 나옵니다.

아주 드문 것처럼 보일 수도 있지만 문제를 파악할 수 없습니다.

+1

왜 u는 단지 U는 ID가 정수 –

+0

을 사용할 수 있으며, 아이디를 저장하는 배열을 복용 아마 더 길 것이고 이것은 프로그램의 일부일뿐입니다. 나는 이드의 첫 자릿수가 단순히 성을 보여줄 것이라고 생각한다. –

+1

정말 컴파일러 경고를 활성화해야합니다. – Lundin

답변

10

if (array[0]=1)if (array[0]==1)이어야합니다.

else if (array[0]=2)과 동일합니다. 당신이 =을 변경하지 않을 경우 경우 문 아래의 코드는 항상 실행됩니다 왜 과제의 발현이 경우 if (array[0]=1)에서 할당 된 값을 반환

참고 항상 참 될 것입니다, 그건 ==.

=은 할당 연산자이며, 할당하지 말고 비교하려고합니다. 따라서 ==이 필요합니다.

정수 하나만 원한다면 배열을 사용하는 이유는 무엇입니까? 당신은 또한하고자 할 수도 있습니다 scanf("%d", &array[0]);

+0

그가 일련의 숫자로로드하려고 시도했을 수 있습니까? 본질적으로 for-loop 랩핑 스캔. – Shark

+0

그런 다음 그는'scanf ("% d % d ...", & array [0], & array [1], ...) (루프를 사용하여) 스캔해야합니다 ... – Maroun

0

%d 변환 지정자는 하나의 십진 정수로 변환됩니다. 배열을 전달한다는 것을 알지 못합니다. 배열을 기반으로 동작을 수정할 수 없습니다. 변환 지정자는 변환을 지정합니다.

배열에 대한 지정자가 없으므로 명시 적으로 지정해야합니다. 다음은 4 가지 전환이 포함 된 예입니다.

if(scanf("%d %d %d %d", &array[0], &array[1], &array[2], &array[3]) == 4) 
    printf("got four numbers\n"); 

입력 된 숫자 사이에 공백이 있어야합니다.

char id[12]; 

if(scanf("%11s", id) == 1) 
{ 
    /* inspect the *character* in id[0], compare with '1' or '2' for instance. */ 
} 
0

사용

scanf("%d", &array[0]); 

=

+3

'& array [0] ''배열과 동일합니까? – zakinster

2
int main() 
{ 
    int array[11]; 
    printf("Write down your ID number!\n"); 
    for(int i=0;i<id_length;i++) 
    scanf("%d", &array[i]); 
    if (array[0]==1) 
    { 
    printf("\nThis person is a male."); 
    } 
    else if (array[0]==2) 
    { 
    printf("\nThis person is a female."); 
    } 
    return 0; 
} 
대신을 비교 한 대한 ==를 사용하십시오 ID가 하나의 11 자리 숫자 인 경우

, 그것은 문자열로 처리하는 것이 가장 좋습니다

+0

@zakinster, 고마워요, 제 대답을 편집했습니다 –

-4

그냥 사용

루프 에 대한에

cin << array[i];

다음과 같은 헤더 파일을 포함하는 것을 잊지 마세요 :

#include<iostream> using namespace std;

+0

이것은 C가 아니라 C++입니다. 그리고 그 위에는 << 연산자가 std :: cin에서 작동하지 않습니다. – user530873