GCC 컴파일러에서 Codeblocks IDE를 사용하고 있습니다.구조체 배열에서 문자 요소를 사용할 때 런타임 오류가 발생하는 이유
구조체에 다른 유형의 요소가있는 구조체 배열을 구현하려고합니다. 지금까지 모든 구조체 배열이 잘 작동합니다. 하지만 변수의 문자 유형을 구조 요소로 사용하면 런타임 오류가 발생합니다. 왜 이런 일이 발생합니까? 코드는 :
#include <stdio.h>
int main()
{
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 %d", &b[i].name, &b[i].price, &b[i].pages) ;
}
for (i = 0 ; i <= 2 ; i++)
printf ("\n%c %f %d", b[i].name, b[i].price, b[i].pages) ;
return 0;
}
I는이 문제는 "%의 C"와 같은 형식 문자열 앞에 공백을 사용하여 해결 될 수 있음을 이해해야.
그러나 문자 배열의 경우 gets 함수를 사용하는 동안 여전히 동일한 문제가 발생합니다. 코드는 다음과 같습니다
#include <stdio.h>
int main()
{
int i;
struct Bookinfo
{
char bname[20];
int pages;
int price;
};
struct Bookinfo book[3];
for(i=0; i<3; i++)
{
printf("\nEnter the Name of Book : ");
gets(book[i].bname); //This statement creates runtime error
printf("\nEnter the Number of Pages : ");
scanf(" %d",&book[i].pages);
printf("\nEnter the Price of Book : ");
scanf(" %d",&book[i].price);
}
printf("\n--------- Book Details ------------ ");
for(i=0; i<3; i++)
{
printf("\nName of Book : %s",book[i].bname);
printf("\nNumber of Pages : %d",book[i].pages);
printf("\nPrice of Book : %d",book[i].price);
}
return 0;
}
'% c'공백 건너 뛰기 ->' "% c"앞에 공백 넣기 – BLUEPIXY
어떤 오류가 발생하고 있습니까? – Barmar
'% c'은 이전 라인의 끝에있는 개행을 읽습니다. 그렇다면'% f'은 이름을 분석하려고 시도하지만 이름이 숫자가 아니기 때문에 실패합니다. – Barmar