나는 주변을 둘러 보았고 오류가있는 곳을 찾을 수없는 것 같습니다. 나는 그것이 내가 fgets를 사용하는 방식과 관련이 있어야한다는 것을 알고 있지만, 나는 그것이 무엇인지 내 삶에 대해 알 수 없다. 필자는 fgets와 scanf를 섞어서 오류를 생성 할 수 있기 때문에 두 번째 scanf를 fgets로 변경하고 여전히 나머지 입력을 건너 뛴 다음 첫 번째 만 인쇄합니다.Fgets 건너 뛰기 입력
int addstudents = 1;
char name[20];
char morestudents[4];
for (students = 0; students<addstudents; students++)
{
printf("Please input student name\n");
fgets(name, 20, stdin);
printf("%s\n", name);
printf("Do you have more students to input?\n");
scanf("%s", morestudents);
if (strcmp(morestudents, "yes")==0)
{
addstudents++;
}
}
입력 사항은 Joe, yes, Bill, yes, John, no입니다. 첫 번째 fgets 대신 scanf를 사용하면 모두 계획대로 진행되지만 공백이 포함 된 전체 이름을 사용하고 싶습니다. 내가 어디로 잘못 가고 있니?
브릴리언트을! 감사! – user3591385
나는 다음을 보길 원합니다.'int c; while ((c = getchar())! = EOF && c! = '\ n');'여기서 루프 본문의 세미콜론은 자체적으로 한 행에 있습니다. 이것은 사용자가'예'를 입력하거나 입력의 끝에 공백을 넣으면 당신을 보호합니다. 이 경우'char c '대신'int c'를 사용하는 것이 중요합니다. 원래의 코드에서는'c'를 사용하지 않습니다. (왜냐하면 내 기본 컴파일러 옵션은 설정되었지만 사용되지 않는 변수에 대해 불평 할 것이므로 여기서 코드를 사용하면'(void) getchar();)로 끝날 것입니다. 따라서 'EOF'와 유효한 문자를 확실하게 구별 할 수 없다는 사실은 중요하지 않습니다. –
@JonathanLeffler : 내 게시물에 대한 개선 제안을 보내 주시면 다행입니다. 감사합니다 :) 당신이 제안한대로 변경했습니다. 사용자가 '예'라고 입력하면 업데이트 된 변경이 적용됩니다. – user1336087