2014-04-12 6 views
0

방금 ​​C 언어로 배열을 배우기 시작했습니다.
1. 항목 이름과 가격을 인쇄하려고 시도했지만 오류가 발생했습니다. 오류를 컴파일하는 동안 오류가 발생하지만 실행하면 오류가 발생합니다.
내가 뭘 잘못 했니? 여기
char 및 정수 배열

내 코드

#include<stdio.h> 

    int main(void){ 

     float p[7]={0.55,0.8,1,1.2,0.95,0.4,0.6}; 
     int i=1; 

     printf("%s%10s\n","#Item","ItemName"); 
      for(i=1;i<8;i++){ 

       printf("%s%13f0.2\n",i,p[i]); 
    } 

     return 0; 

    } 

내가 이름을 나열 할 수 있습니다 2.How입니까? 나는 char와 함께 시험했다. 그러나 didnt는 잘 움직이게되었다.

char n[10]={'Water','Cola','Fanta','Chokolate','Biscuit','Gum','Candy'}; 

이 errl4 (14) C를 제공합니다 : \ 사용자 에르 \ 바탕 화면 \의 turshilt.c

[Warning] character constant too long for its type 

을 \ 내가 N 변경하는 경우 [100] 내가 번호 및 가격과 방법을 나열 할 수 있습니다?

목록 및 숫자 옆에 품목 및 가격이 표시되어 있습니다.
조언이 있으십니까? 감사합니다

+1

C의 배열은 '1'이 아닌 '0'에서 시작하여 인덱싱됩니다.따라서 배열 인덱스는 값 '7'을 초과 할 때 범위를 벗어납니다. '0'에서 '6'으로 이동해야합니다. – lurker

+1

모든 경고를 활성화하면 멀티 바이트 문자 상수에 대한 내용이 보일 것입니다 –

답변

1

char 유형 값 배열과 문자열 배열 사이에 차이가 있음을 이해해야합니다.

당신은이 두 가지 모두가 동일한 값이다 그래서

char bar = 65; 
char foo = 'A'; 

같은 번호를 사용하여 하나의 char 값, 또는 작은 따옴표를 나타낸다. char은 한 문자의 정보 만 저장할 수 있으며 크기는 바이트로 제한됩니다.

당신이 char s의 문자열을 선언하고

따옴표 짐 루이스 올렸습니다 당신이 알고 있다면, 당신은 일정한 크기의 배열을 사용하는 대신

char string[100] = "Hello!"; 

을 사용하여 컴파일시. 이 경우 가장 바깥 쪽 수준의 크기를 제외한 모든 크기를 지정해야합니다.

char n[10]={'Water','Cola','Fanta','Chokolate','Biscuit','Gum','Candy'}; 

사용한다 : C에서

// This will store as many 19 letter words, as you specify in the declaration 
char strings[][20] = {"One", "word", "two", "words"}; 
// The index starts at zero 
printf("%s\n", strings[0]); // -> One 
printf("%s\n", strings[1]); // -> word 
printf("%s\n", strings[2]); // -> two 
printf("%s\n", strings[3]); // -> words 
printf("%s\n", strings[4]); // -> ERROR - out of bounds 
1
float p[7]={0.55,0.8,1,1.2,0.95,0.4,0.6}; 

배열은 그래서 당신의 for 루프가 귀하의 질문의 다른 부분에 대한

for(i=0;i<7;i++) { ... } 

해야한다, 0부터 시작 색인 문자열을 큰 따옴표로 묶습니다 (작은 따옴표는 문자 상수). n 10 포인터하지 열 개 문자, 의 배열해야하며 배열 크기 초기화의 수와 동일하게하는 것이 좋습니다입니다 :

char *n[7]={"Water","Cola","Fanta","Chokolate","Biscuit","Gum","Candy"}; 
+0

'printf ("% s % 13f0.2 \ n", i, p [i]);'부분이 잘못되었습니다.'printf "% s % 13 0.2f \ n", i, p [i]);도 잘못되었습니다. 13과 0.2를 어떻게 함께 사용할 수 있습니까? – user3371196

0

이유를 설명하기 위해 다른 답변을 읽어합니다. 이를 수행하는 방법에 대한 전체 예제는 아래 예제를 참조하십시오.

#include <stdio.h> 

int main(void){ 

    // array sizes do not need to be explicitly set when initialized this way 
    char *n[]={"Water","Cola","Fanta","Chokolate","Biscuit","Gum","Candy"}; 
    float p[]={0.55,0.8,1,1.2,0.95,0.4,0.6}; 
    int i; 
    // calculate array length, so can change array length without breaking code 
    int len = sizeof(n)/sizeof(*n); 

    // tinker with printf if you want to make the columns wider, etc. 
    printf("%s%11s%9s\n", "Item #", "Item Name", "Price"); 
    for(i = 0; i < len; i++) { 
     printf("%6d %-10s%8.2f\n", i + 1, n[i], p[i]); 
    } 
    return 0; 
} 
+0

그 잘 작동하지만, 어떻게'printf ("% 6d % -10s % 8.2f \ n", i + 1, n [i], p [i]); '% -10s '는 측면 10을 가리키는 것을 의미합니까? 하지만'n [i]'는'ItemName' 밑에 어떻게 나타나 있습니까? – user3371196

+0

헤더에 "항목 #"및 "항목 이름"에 대한 % s % 11이 (가) 있습니다. "Item #"은있는 그대로 6 자로 인쇄됩니다. 길이가 9 인 "항목 이름"은 11 개의 공백으로 오른쪽 정렬하여 인쇄되며 텍스트 앞에 공백이 2 개 있습니다. 결과적으로 "Item Name"텍스트가 9 열에서 시작됩니다. 세부 줄의 "% 6d % -10s", 마찬가지로 n [i]가 9 열에서 시작하여 인쇄됩니다. 헤더는 "% 6s % 9s % 5s "를 사용하여 줄을 쉽게 볼 수 있습니다. –