사용자가 2 개 이하 또는 2 개 이하의 정수만 입력하길 원합니다. 또한 잘못된 입력시 오류를 인쇄하고 두 정수를 다시 입력하라는 메시지를 표시합니다. 사용자는 줄 바꿈이 아닌 공백으로 구분 된 두 개의 정수를 입력해야합니다. 따라서, 예를 들어 :
1) 유효 입력된다 : 1 2
2)가 잘못 입력 1
3) 잘못 입력 :사용자가 C에서 필요로하는 것보다 더 많은 또는 적은 입력을 입력하는 것을 방지하려면 어떻게해야합니까?
#include<stdio.h>
int main(){
int first;
int second;
printf("Enter input:\n");
int returnValue = scanf("%d %d", &first, &second);
while(returnValue != 2){
printf("Invalid input. Please enter again: \n");
returnValue = scanf("%d %d", &first, &second);
}
printf("First: %d Second: %d\n", first, second);
return 0;
}
: 1 2 3
I는 두 가지 방식에 따라 그것을 시도
scanf가 관련된이 첫 번째 접근 방식에서는 사용자가 개행에서 각 정수를 입력하지 못하게했습니다. 어느 쪽도 입력을 단지 2 개의 숫자로 제한 할 수 없다. 즉, 사용자가 2 이상의 정수를 입력하면 프로그램은 처음 2 정수를 허용하고 3 정수를 무시합니다. 이 경우 오류를 인쇄하고 싶습니다.
내 다른 접근 방식이는 fgets와 sscanf를 포함한다 :이 방법에서
#include<stdio.h>
int main(){
int first;
int second;
printf("Enter input:\n");
char line[20];
fgets(line, sizeof(line), stdin);
int returnValue = sscanf(line, "%d %d", &first, &second);
while(returnValue != 2){
printf("Invalid input. Please enter again: \n");
fgets(line, sizeof(line), stdin);
returnValue = sscanf(line, "%d %d", &first, &second);
}
printf("First: %d Second: %d\n", first, second);
return 0;
}
을, 나는 사용자 안타는 단 하나의 정수를 입력 한 후 입력하면 오류를 인쇄 할 수 있어요. 그러나 입력을 단지 2 개의 숫자로 제한 할 수는 없습니다. 즉, 사용자가 2 이상의 정수를 입력하면 프로그램은 처음 2 정수를 허용하고 3 정수를 무시합니다. 이 경우 오류를 인쇄하고 싶습니다.
제 질문은 첫 번째 접근 방식과 두 번째 접근 방식을 수정하여 내 요구 사항을 달성 할 수 있습니까?
감사합니다.
하드웨어 지원이 없으면 (예 : 모든 글자가 비활성화 된 키보드, 문자 A를 치면 사용자를 전기 방식으로 전환하는 등) 사용자가 선택한 입력을 금지 할 수 없습니다. 당신이 할 수있는 대부분은 입력을 받아들이고 그것을 확인하는 것입니다. 잘못된 입력이 발생하면 잘못된 부분을 무시하거나 데이터 블록을 무시하거나 (예 : 잘못된 입력이있는 경우 전체 행) 무시하거나 단순히 입력을 버리고 사용자가 유효한 내용을 입력 할 때까지 계속 묻습니다. – Peter
"제 질문은 첫 번째 접근 방식과 두 번째 접근 방식을 수정하여 내 요구 사항을 달성 할 수 있습니까?" -> 예, [예] (http://stackoverflow.com/a/27805565/2410359)하지만 그만한 가치는 없습니다. [@ David Bowling] (http://stackoverflow.com/a/41917246/2410359) – chux