2010-11-19 10 views
0

struct 객체에 몇 개의 값을 저장하려고하는데 사용자가 "yes"를 입력 할 때까지 프롬프트를 반복하고 싶습니다. 나는 그것을 위해 do-while 루프를 사용하고 싶다. 나는 이미 첫 번째 "성"의 읽기로 실패하고있다. 입력 할 때 프로그램이 멈 춥니 다 (오류 없음). do-while을 사용하지도 않습니다. 왜냐하면 while() 상태에서 작동하는지 확실하지 않기 때문입니다. 당신의 형식 지정자로
C 및 do-while 루프를 사용하여 struct 객체에 값 저장

#include <ctype.h> 
#include <stdio.h> 
#include <string.h> 

struct employeelist 
{ 
char last[6]; 
char first[6]; 
int pnumber; 
int salary; 
}; 

int main() 

{ 
struct employeelist employee[5]; 
char check; 

//do 
//{ 
printf("Hello. Please type in the last name, the first name, the personal number and the salary of your employees.\n"); 
printf("Last name: "); 
scanf("%c", employee[1].last); 

printf("First name: "); 
scanf("%c", employee[1].first); 

printf("Personal number: "); 
scanf("%d", &employee[1].pnumber); 

printf("Salary: "); 
scanf("%d", &employee[1].salary); 

printf("You have more employess (yes/no)?: "); 
scanf("%c", &check); 
//}while (scanf("yes")); 

return 0; 
} 
+0

실제로 질문하지 않았 음을 알고 있습니까? 당신은 많은 코드를 버리고 "작동하지 않는다"고 말했다. – abelenky

+0

죄송합니다, 다음 번에 더 구체적으로하려고 노력할 것입니다. 그리고 이것은 내가 학교에서 겪고있는 숙제가 아닙니다. 나는 혼자 공부하고 있습니다. – Ordo

답변

2


사용 %s 당신은 문자열을 얻으려고 노력하는 경우. 너는 lastfirst을 위해 얼마나 많은 공간을 가지고 있느냐에 따라 그 길이를 5로 제한하고 싶을지도 모른다. 그러면 %5s이됩니다. 또한 5 자로 이름이 짧습니다.

다른 주석 : C의 배열은 0부터 시작하므로 employee[1]은 배열의 두 번째 employeelist입니다. 증가 인덱스가있는 루프에서이 작업을 수행하려면 0에서 시작하십시오.

+0

감사합니다. char [length]에 값을 주어야합니까? – Ordo

+1

@Ordo : 일종의. 런타임에 문자열을위한 공간을 동적으로 할당하고자한다면, 변환 지정자에서 'a'를 사용하여'scanf'가'malloc'을 호출하도록하는 GNU 확장이 있습니다. 물론 Microsoft의 C++ 컴파일러에서는 작동하지 않을 것입니다. malloc을 직접 호출 할 수도 있지만 숙제의 경우 큰 버퍼를 정적으로 할당하고 형식 지정자로 사용자를 보유하는 것이 가장 쉽습니다. – nmichaels

+0

문자 배열에 저장하려면 mallocing을 계획하지 않는 한 길이를 지정해야합니다 – prelic

1

안녕하세요. 문자 배열을 읽을 때 scanf ("% s", employee [1] .last)를 사용해야합니다. % s (% c 제외)

1

이 코드가 어떤 것이라고 생각하십니까?

scanf("%c", .... 

%c는 scanf와는 ONE 문자를 읽을해야 함을 나타냅니다.
한 글자만으로는 전체 이름을 얻을 수 없습니다.

처음에는 %s으로 전환해야합니다. 으로 작동하는 모든 첫 번째 인덱스의

1
  1. 먼저 문자열을하지 1.
  2. 잘못된 식별자 '0'이 될 것입니다, 그것은 %의이어야한다.
  3. 그냥 y를/n를 다음 단지 y로 아니오/예에서 디스플레이 메시지를 변경/N 또한 == 'y'를 확인하는 이상한 동안 조건을 변경 요청 으로 반복 할 경우
  4. || 확인 = = 'Y'. 당신 당신이 그 루프에 추가하지 type.Why가하는 의 5 개 구조를 초기화하기 때문에
  5. 코드는 실제로 5 반복 한 후 작동하지 않습니다?
관련 문제