2013-06-28 3 views
1

저는 C로 코딩하는 법을 배우기 시작했습니다. 이것은 제 첫 번째 비 - 웹 언어이며, 좋은 시작이 아닙니다. 난 그냥, 내가 엑스 코드는 정도 나 신음 중지하기 위해서는 몇 가지 변경 했어 동작하지 않습니다 어떤 이유C 코드가 제대로 작동하지 않습니다.

// 
// main.c 
// Greeting 
// 
// Created by Austen on 2013-06-27. 
// Copyright (c) 2013 Austen. All rights reserved. 
// 

#include <stdio.h> 

int main() 
{ 
    int confirm[100]; 
    char name[100]; 
    char mood[100]; 

    printf("Please enter your name: "); 
    scanf("%s", name); 
    printf("Hey there, %s . How are you? ", name); 
    scanf("%s", mood); 
    printf("Oh, you are %s?. Enter 1 or 0: ", mood); 
    scanf("%i", confirm); 
    if (confirm == 1) { 
     printf("Oh good!"); 
    } 
    else { 
     printf("Make up your mind"); 
    } 
    getchar(); 
    return(0); 

} 

:

나는 다음과 같은 코드가 있습니다 많은 이유. 내가 그것을 실행하면 내가 1을 입력하더라도, 나에게

warning: Comparison between pointer and integer int* and int 

을주고, 내 마음을 만들기 위해 나에게 말한다.

도움이 될 것입니다. 다음 번에 더 잘 알 것입니다. 아마 뭔가 간단 할 것 같습니다. (확인 용) 정수

확인 배열로 선언되어 있지만 그냥 일반 정수를 원하는에 대한

+0

"scanf"에서 정수를 가져 오려면 "% d"인수를 지정하십시오. – MYMNeo

+0

'confirm'은 배열이 아니어야합니다. 그냥'int confirm; –

+0

추후 참조를 위해 출력에서 ​​복사하여 붙여 넣기 한 전체 경고 메시지를 제공 할 수 있다면 유용합니다. C는 조심성이 없으며, 종종 경고를 읽거나 형성하는 행위는 귀하가 무시하고있는 것을 깨닫게합니다. SO에 오신 것을 환영합니다 :-) – Alex

답변

4

더 쉽게이

if (confirm[0] == 1) 

또는 같은 confirm에 대한 답을 보유 할 배열을 만들 필요가 없습니다 것 :

int confirm; 

그러나 scanf은 다음과 같이 주소를 전달해야합니다.

scanf("%d", &confirm); 

마지막으로,이 - scanf("%i", confirm);은 실제로는 - scanf("%d", &confirm);이어야합니다.

%d은 정수 변수의 표준 서식 지정 문자입니다.

그 후에 모든 것이 잘 컴파일됩니다.

C는 항상 값으로 전달되므로 scanf은 제공된 변수에 입력 한 값을 저장하는 방법이 없습니다. 메모리가 상주하는 메모리 내부에 도달하지 않으면 직접 메모리에 씁니다.

변수 자체가 아니라 변수의 메모리 주소를 물어 보는 이유입니다 (사용자가 &을 붙임으로써 무언가의 주소를 제공합니다).

배열은 이미 함수로 인수로 전달할 때 주소로 처리됩니다 (포인터가 더 정확하고 포인터는 무언가의 주소를 저장합니다).

포인터 및 배열에 대한 정보 here.

+1

Omg. 작동합니다 : P 정말 고마워요 <3 – Austen

+0

하지만 &를 추가해야하는 이유를 설명해 주시겠습니까? – Austen

+1

그것은'confirm'의 메모리 주소에 대한 포인터를 전달해야하기 때문입니다. 그리고 그것은'&'연산자가하는 것입니다. –

2

사용 %d. 선언에서 confirm 뒤에 [100]을 제거하십시오. 그것은 단지 있어야합니다.

int confirm; 

confirm가 배열이고이 정수 값으로 배열의 기본 주소 (확인)를 비교하려하기 때문에 당신이있어 경고했다 (1). 당신이 배열을 선언 할 때마다

는, 그 배열의 기본 주소는 배열 이름에 사용할 수 있습니다. (예. confirm 여기)

scanf("%d",&confirm); 

이해야와 confirm 걸리는 scanf 라인을 교체 괜찮습니다.

+0

여전히 같은 문제가 발생했습니다/ – Austen

+0

하나 더 오류가 있습니다 .... 확인 배열로 선언되었습니다 .... 대답을 다시 참조 –

3

경고를받는 이유는 100 개의 정수 배열을 1 개의 정수와 비교하기 때문입니다. 올바른 코드는 정상 int 할 것,

int confirm; 
scanf("%d", &confirm); 
if (confirm == 1) 
관련 문제