바론君 MYPI

바론君
접속 : 5767   Lv. 67

Category

Profile

Counter

  • 오늘 : 22 명
  • 전체 : 74087 명
  • Mypi Ver. 0.3.1 β
[컴퓨터] 완전 아무것도 모르는 개초보의 C질문 하나 (8) 2012/03/07 PM 07:46
안녕하세요 학교수업으로 헬로 월드부터 차근차근 C를 배워 나가는 중입니다.

예전에 PHP나 자바스크립트를 끄적끄적거리긴 했는데 그냥 아무것도 모른다고 봐도 됩니다.

예제 코드를 짜는데 문제가 세개라 그냥 한개 프로그램안에 다 때려박아봤는데 안되는겁니다.

main함수 안 맨 윗줄에 printf 를 한번 쓰고

그밑에서 int형,double형, char형 변수를 정의하고, 그 밑에 방금전에 정의한 변수에 값을 넣고, 다시 printf로 출력해보려고 했습니다.

그런데 빌드를 해보니까 첫 printf밑에 정의한 변수들에서 에러 메세지가 뿜어져 나오는 겁니다.

원래 printf 뒤에 변수를 정의하면 안되는건가요?

제가 써놓은걸 보고서는 뭔 개소리야 하실테니 코드와 에러메세지를 올립니다.

-----------------------------------------------------------------------------------------------------

#include
#define PI 3.1415

int main()
{
printf("텍스트\n텍스트\n텍스트\n");

int n;
double w;

n = 10;
w = 16.3;

printf("%d\n",n);
printf("%lf\n",w);

double ra, ar;
printf("-nput radius : ");
scanf("%lf",&ra);
ar = PI*ra*ra;
printf("area : %lf\n",ar);

return 0;
}

에러 메세지

error C2143: 구문 오류 : ';'이(가) '형식' 앞에 없습니다.
error C2143: 구문 오류 : ';'이(가) '형식' 앞에 없습니다.
error C2065: 'n' : 선언되지 않은 식별자입니다.
error C2065: 'w' : 선언되지 않은 식별자입니다.
warning C4244: '=' : 'double'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
error C2065: 'n' : 선언되지 않은 식별자입니다.
error C2065: 'w' : 선언되지 않은 식별자입니다.
error C2143: 구문 오류 : ';'이(가) '형식' 앞에 없습니다.
error C2065: 'ra' : 선언되지 않은 식별자입니다.
error C2065: 'area' : 선언되지 않은 식별자입니다.
error C2065: 'ra' : 선언되지 않은 식별자입니다.
error C2065: 'ra' : 선언되지 않은 식별자입니다.
warning C4244: '=' : 'double'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
error C2146: 구문 오류 : ';'이(가) 'printf' 식별자 앞에 없습니다.
error C2065: 'ar' : 선언되지 않은 식별자입니다.

---------------------------------------------------------------------------------------------------------

설명좀 해주시면 열심히 이해해 보겠습니다 -_-;;

신고

 

여긴어디??    친구신청

그냥 선언하면서 동시에 값을 줘버리세요

바론君    친구신청

여긴어디?? // 첫 n,w를 바로 값을 주는 걸로 수정했는데 마찬가지 에러가 나오네요 ;;

wofhal    친구신청

이거 c++이 아닌 c로 작성하신거면
중간에 선언을 하면 안됩니다
int나 double같은 선언을 제일 위로 올려서 하세요

바론君    친구신청

wofhal// C에서는 printf 뒤에 변수를 선언하는걸 허용하지 않나요?

술잔에담긴별    친구신청

위에 적힌 프로그램 복사해서 사용해보니 잘 출력되는데요??


http://img2.ruliweb.daum.net/img/img_link7/817/816736_1.jpg

레이지군    친구신청

printf 뒤에가 아니고 함수 시작에만 허용합니다.
만약에 함수가 긴경우 중간에 변수 선언을 하고자 한다면
중괄호로 한번 묶어주세요
ex> void main()
{
//변수선언은 젤 첨에
int a, b;
a =10;
b = 20;
//여기서 에러
int c;
//중간에 변수 선언을 하려면 중괄호로 묶는다
{
int d;
}
}

死神    친구신청

저게 C++ 구문에서는 이상이 없는데 표준 C 구문의 경우는 변수 선언은 함수의 시작에서 하도록 되어 있습니다. 그게 중간에 되어 있어서 에러가 나오는것 같습니다.
아니면 레이지군님이 하신것처럼 중괄호를 써도 되지만 중괄호 바깥으로 중괄호 안에서 선언된 변수가 못나간다는 것이 있으니까 처음에 선언하는게 속편합니다.
컴파일러에 따라서 잘 될수도 있고 안될수도 있는데 컴파일러가 C표준을 따른다면 안됩니다. 변수 선언부분을 메인문 중괄호 시작부분 바로 아래로 옮기시면 됩니다.

바론君    친구신청

레이지군,死神// 감사합니다. 함수 시작이라고 하는거는 변수 선언 외의 다른 작업을 한 시점부터는 시작이 아니라고 이해하면 되는건가요?

술잔에담긴별// .cpp로 하신걸보니 C++로 빌드가 됐나보네요 ㅎ
X