2017-03-18 1 views
0

이 게시물에 첨부 된 코드는 더 큰 프로그램의 일부이지만 구조화 된 변수 'title'및 'author'에 대한 입력을받는 동안 문제가 발생합니다. 프로그램이 반복되어 다음 줄로 이동하는 것처럼 보입니다. 또한 문자열 지정자에서 [^ \ n] 앞에 's'를 사용하는 동안은 scanf를 사용하여 문자열을 입력으로 사용하는 것과 같지만 읽습니다. 몇 가지 게시물을 읽었지만 문제를 파악할 수는 없습니다. C로 시작하면 도움이 될 것입니다!구조 입력을위한 scanf 사용

struct books{ 
char title[30]; 
char author[30]; 
char subject[20]; 
int quantity; 
int book_id; 
char *category; 
int count; 
float price; 
}; 
struct books book; 

book.book_id=id; 
printf("\n\n\t\tBook Name:\n\t\t"); 
scanf(" %s",book.title); 
printf("\n\n\t\tAuthor:\n\t\t"); 
scanf(" %[^\n]s",book.author); 
printf("\n\n\t\tQuantity:\n\t\t"); 
scanf("%d",&book.quantity); 
printf("\n\n\t\tPrice:\n\t\t"); 
scanf("%f",&book.price); 
+0

% s 이전의 공간 일 수도 있습니다. – Luci

+1

형식 지정자에 실제로 [[^ \ n]] 대신 [[^ \ n]'이 포함되어 있습니까? 거기에 여분의 공간도 필요하지 않습니다. '[^ \ n]'은 공백 문자 대신 문자열 구분 기호로 '\ n'을 지정합니다. 당신이 그것을 시도했다면, 그것은 당신이 게시 했어야하는 코드입니다. 입력에 공백이 없거나 문제가있는 경우에도 작동합니까? – Clifford

+1

[mcve]하시기 바랍니다. BTW,'[^ \ n] 뒤에's'는 잘못되어서 제거해야합니다. 이것은 효과가 없지만 완전히 불필요합니다. –

답변

0

사용하여 입력 "book.title"모두 문자열 지정자 'S'및 'book.author "전 [^ \ n].

수정 된 코드를 실행했습니다. 코드가 정확합니다.

책의 제목으로 분리 된 문자열을 사용하고 있습니다. (제목과 같은 "나의 투쟁". 등)

그러나 당신은 당신이 입력 공간이 scanf와 사용하여 하나의 문자열로 단어를 구분 할 수 것을 이해해야합니다. 그래서 프로그램은 그것을 반복하고 다음 줄로 이동합니다.

문자열 지정자의 '이전 또는 는 fgets 기능 또는 사용 [^ \ n을]을 얻는다 사용해야 할 것 같은 입력을합니다.

+0

(book.title)이 실제로 동일하게 처리됩니다. 제목을 작성자에게 반복합니다. –

+0

scanf를 사용하여 공백이있는 문자열을 허용 할 수 있습니다. 중복으로 표시된 답변을 참조하십시오. 문자열 inpout에 scanf를 사용하는 것이 현명한 방법인지 여부는 또 다른 문제입니다. – Clifford

+1

@SyedHasan : "루프 오버"는 무엇을 의미합니까? 코드 조각에 루프가 없습니다. 'gets()'를 사용하지 마라 - 더 나쁜'scanf()'! 중복 된 것으로 표시된 질문은 fgets()와'scanf()'를 사용한 예제입니다. – Clifford