내 사용자 입력이 실제로 두 개의 요소와 개행 만 있는지 실제로 확인합니까?scanf 유효성 검사 C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
내 사용자 입력이 실제로 두 개의 요소와 개행 만 있는지 실제로 확인합니까?scanf 유효성 검사 C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
scanf()
의 반송 상태를 확인해야합니다. 3을 반환하지 않으면 유효성 검사에 실패했습니다. 귀하의 수표는 두 개의 '단어'가 있음을 보장합니다 (아마도 약간의 공백이 선행 될 수 있습니다). 두 번째 단어 다음에 공백 문자를 사용할 수 없습니다. 유효성 검사가 실패 할 경우 나머지 줄을 먹어야 할 수도 있습니다. 줄 바꿈이있는 경우에는 newline
이됩니다.
아니요! scanf
두 번째 문자열과 줄 바꿈 사이에 공백 문자가있는 경우 올바로 작동하지 않습니다. 그에 대한 getc()
를 사용
scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' ' || newline == '\t');
if(newline != '\n'){
error();
}
편집 :
이 공백을 후행 경우 추가.
네, 그게 효과가 있습니다. 그러나 입력이 정확하게 일치하는 경우에만 : word word<enter>
.
사용자가 두 번째 단어와 사이의 공백을과 같이 입력하면 논리가 실패합니다.
char newline;
char out[50];
char in[50];
scanf("%s %s%c", out, in, &newline);
if(newline != '\n')
{
printf("error!");
}
또한 scanf와 shouldn't 그런 입력에서 읽을 수. 입력을 읽으려면 fgets을 사용하고 데이터를 구문 분석하려면 strtok을 사용하십시오.
테스트 해 보셨습니까? – karlphillip
조심하십시오. 'out'과'in'은 사용자 타입에 관계없이 충분한 공간을 가질 필요가 있습니다. 아마도'% ns'을 사용해야 할 것입니다.'n'은'out' 또는''in''에 의해 가리키는 버퍼의 크기입니다. 그래서 버퍼가 12 바이트 길이라면,'% 11s'. – nmichaels
[20] char out [20]에 char가 있습니다. 감사합니다. "% 20s % 20x" – Jono