2013-11-20 2 views
2

구조체의 값을 읽고 인쇄하는 프로그램을 작성했습니다. 나는 scanf가 char를 제외하고 모든 kinf에 대해/n을 무시한다고 생각했지만 아래 프로그램을 실행하고 첫 번째 입력을 정수로 제공 할 때. 나는 이름 변수를위한 o/p를 얻지 못한다. 왜??scanf의 개행 문자

#include <stdio.h> 
#include <string.h> 
struct employee 
{ 
    int empno; 
    char name[10]; 
    float p_money; 
}; 

int main() 
{ 
    struct employee e; 
    struct employee *ptr; 
    ptr = &e; 
    printf("please enter the empno \n"); 
    scanf("%d", &(ptr->empno)); 
    printf("please enter the name \n"); 
    gets(ptr->name); 
    //scanf("%d", &(ptr->empno)); 
    printf("please enter the money \n"); 
    scanf("%f", &(ptr->p_money)); 
    printf("Roll No: %d\n", ptr->empno); 
    printf("Name: %s\n", ptr->name); 
    printf("Money: %f\n", ptr->p_money); 
    getchar(); 
    return 0; 
} 

실행 :

please enter the empno 
10 
please enter the name 
please enter the money 
100.99 

롤 번호 : 10 이름 : 돈 : 100.989998

please enter the empno 
10jackal 
please enter the name 
please enter the money 
100.99 

롤 번호 : 10 이름 : 자칼 돈 : 100.989998

+0

당신이 얻은 결과와 정확히 어떤 결과가 기대됩니까? –

+3

IMO C++ 태그가 없어야합니다. –

+1

이미 많은 문제가 있습니다. 문제는 scanf ("% d")가 입력 버퍼에 후행 줄 바꿈을 남긴 다음 gets()가 그 왼쪽 끝 줄 바꿈 문자를 (매우 짧은) 줄로 읽는다는 것입니다. –

답변

2

문제 scanf이 아니라 gets 인 경우 - fgets을 대신 사용하십시오.

char * gets (char * str);

gets - 개행 문자 또는 파일 끝에 도달 할 때까지 표준 입력 (stdin)에서 문자를 읽고 str에 C 문자열로 저장합니다.

+0

reply acme에 감사드립니다. scanf가 콘솔에서 입력 한 개행 문자를 제거한다는 것을 알고 있습니다. 그래서 10을 입력 한 다음 Enter 키를 누르면 '/ n'이 제거되지 않아야하며 문자열 이름에 대한 입력을 요구하지 않아야합니까 ?? 슬프게도 나는 왜 내 프로그램이 이런 식으로 행동하지 않는지 이해하지 못한다. –

+1

'/ n을 제거하면 안됩니까?'scanf도 자동으로 제거하지 않습니다. char 입력을하는 동안주의해야합니다. – Sadique

+0

"scanf가 콘솔에서 입력 한 모든 개행 문자를 제거합니다"는 잘못되었습니다. ' "% d"'및''% f "'와''" "'와 같은 지시어/지정자는 개행 문자를 사용 (스캔)합니다. 그것은 형식 문자열의 결과이며'scanf()'의 고유 함수가 아닙니다. – chux

0

gets ... gets 대신 1use를 사용합니다.

gets이 나쁜 이유 : (. 새로운 라인 발생)

getsenter이 될 때까지 표준 입력에서 문자를 읽어 누르면됩니다.

귀하의 경우 name[10]이며, 귀하는 gets(name)입니다. gets 얼마나 큰지 알 수없는 name ... 9자를 입력해도 괜찮습니다. 그러나 9 자 이상 입력하면 어떻게됩니까? gets()은 계속해서 당신에게 속하지 않는 메모리를 지나서 모든 char을 계속 쓰며 "Undefined Behavior"