초보자를 C로 사용. 문자열과 ints
이 struct
의 다양한 필드에 입력되는 루프를 실행하려고합니다. '성'에 대한 프롬프트가 표시되면 사용자는 다른 입력없이 Enter 키를 눌러 루프를 종료해야합니다.fgets 및 sscanf를 정수로 사용하는 방법
문제는이 코드 루프 나던 말 (성과 이름 입력 요청이 동일한 라인에서 함께 실행) 및 급여에 대한 값으로 항상 밖으로 잘못 온다 (0 또는 일부 많은 수의)
입니다while (employee_num <= 2)
{
printf("Enter last name ");
fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin);
printf("Enter title ");
fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin);
printf("Enter salary ");
fgets(strng_buffer, 1, stdin);
sscanf(strng_buffer, "%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
대신이 코드를 사용하면 루프를 처음 실행 한 후에 루프를 종료 할 수 있지만 그 후에 끝낼 수는 없습니다 (성 부분에서 Enter 키를 눌러서 \ n 할 수 없습니다. ?) :
char strng_buffer[16];
while (employee_num <= 5)
{
printf("Enter last name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].last_name);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].first_name);
printf("Enter title ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].title);
printf("Enter salary ");
scanf("%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
이 작품을 만드는 방법에 대해 궁금합니다. 의도 한대로 그리고 이것과 같은 항목에 대한 모범 사례 (예 : sscanf, fgets 등 사용)
미리 감사드립니다!
감사합니다! 이러한 질문을 통해 scanf()를 사용할 때 어떤 일이 벌어지고 있는지 훨씬 잘 이해할 수있었습니다. 내가 틀렸다면 나를 정정하십시오. 그렇지만 배열에 stdin을 쓰고 sscanf()를 사용하여 int 값을 변수에 다시 읽을 수 있습니까? – Gitarooman
예, fgets와 sscanf는 그런 식으로 작동합니다. % s 형식 지정자는 sscanf에 * 단어 * (예 : 0 개 이상의 공백이 아닌 문자를 첫 번째 공백까지)를 복사하도록 알려줍니다. 나머지 fgets'd 라인은 어떻게됩니까? 이것은 귀하의 두 번째 게시물이 귀하의 첫 번째 게시물과 다른 하나의 방법입니다. – Sebivor