2012-05-01 3 views
0

오늘 C에서 구조체의 기초를 배웠고이 간단한 코드를 작성했습니다. 아무런 오류없이 컴파일 중입니다. 성공적인 컴파일은 버그없는 소프트웨어를 보장하지 않는다는 것을 알고 있습니다. 실행 중에는 두 개의 구조 변수에 대해서만 입력을 스캔하여 잘못된 표시를 제공합니다. 간단히하기 위해 나는 책 이름을 저장하기 위해 char를 선택했다. 나는 여기서 버그를 알아낼 수 없다. 찾을 수 있니?C 구조체 코드가 컴파일 중이지만 실행 중이 아닙니다.

for (i = 0; i <= 2; i++){ 
    printf("\nEnter name, price and pages "); 
    scanf("%c %f %i",&b[i].name,&b[i].price, &b[i].pages); 
    while((ch=getchar())!='\n'); //eat the chars 
} 

튜토리얼/게시물 :

#include<stdio.h> 

int main(void) 
{ 
    struct book 
    { char name; 
     float price; 
     int pages; 
    }; 

    struct book b[3]; 

    int i; 

    for (i = 0; i <= 2; i++){ 
     printf("\nEnter name, price and pages "); 
     scanf("%c %f %i", &b[i].name, &b[i].price, &b[i].pages); 
    } 

    for (i = 0; i <= 2; i++) 
     printf("\n%c %f %i",b[i].name, b[i].price, b[i].pages); 

    return 0; 
} 
+1

입력 사항은 무엇입니까? 그리고 당신의 잘못된 결과는 무엇입니까? – texasbruce

+1

컴파일 할 때 오류가 없기 때문에 프로그램이 실제로 원하는 것을 수행 할 수있는 것은 아닙니다. 이것은 보통 a * bug *라고 불립니다. –

+0

@GregHewgill 컴파일이 버그없는 소프트웨어를 보장하지 않는다는 사실을 알고 있습니다. 나는 위에서 언급 한 코드에서 버그를 아는 것에 관심이 있었는데, 이는 그렇게 명백하지 않습니다. 당신이 버그를 볼 수 있다면, 친절하게 그것을 언급 .. – KawaiKx

답변

1

당신은 (입력 버퍼를 플러시하는) while((ch=getchar())!='\n');을 추가하여 "추가"입력을 제거해야합니다 (char ch;를 선언하십시오)

  1. "Flushing" the input stream
  2. How to Get User Input from console -- safely.
+0

굉장 .. 그것은 효과가! 고마워. 많이 .. 좀 더 논의 할 수 있을까? 정확하게 잘못되어 가고있는 것. (이 문제에서 학습을 확장하기 위해) – KawaiKx

+1

@Saurabh - 다행 이군. 해결책은 입력 스트림/버퍼를 "비우는"것입니다. – adatapost

+1

@Saurabh - scanf()는 형식 문자열 (문자, 공백, 부동 소수점 숫자, 공백, 그리고 케이스의 정수)의 모든 항목과 일치 할 때까지 stdin (키보드)에서만 읽습니다. 그러면 캐리지 리턴/라인 피드가 입력 버퍼에 떠 다니고 AVD의 while() 루프는 데이터가 수신 될 때까지 데이터를 가져옵니다. 그러면 다음 항목을 준비합니다. – AAT

관련 문제