我想編寫一個程序,以讀取兩個POSITIVE INTEGER作爲輸入,並拒絕用戶輸入除兩個正整數以外的任何內容。我嘗試使用下面的代碼,但它不起作用。驗證輸入C
編輯1:刪除第一個scanf。編輯2:添加代碼來檢查負值。
不工作的代碼:
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned int no1,no2,temp;
char check;
printf("Enter two positive integers.\n");
scanf("%i %i %c", &no1, &no2 ,&check);
if(scanf("%i %i %c", &no1, &no2,&check) != 3 || check != '\n'){
printf("Invalid input!!.\n");
exit(EXIT_FAILURE);
}
else if (no1 <= 0 || no2 <= 0) {
printf("Invalid input!!.\n");
exit(EXIT_FAILURE);
}
int copy1,copy2;
copy1 = no1;
copy2 = no2;
while(no2 != 0) {
temp = no1 % no2 ;
no1 = no2;
no2 = temp ;
}
printf("The H.C.F. of %i and %i is %i. \n",copy1,copy2,no1);
return 0;
}
工作代碼:
#include <stdio.h>
#include <stdlib.h>
int main() {
int no1,no2,temp;
printf("Enter two positive integers.\n");
int numArgs = scanf("%i%i", &no1, &no2);
if(numArgs != 2|| no1 <= 0 || no2 <= 0){
printf("Invalid input!!.\n");
exit(EXIT_FAILURE);
}
int copy1,copy2;
copy1 = no1;
copy2 = no2;
while(no2 != 0) {
temp = no1 % no2 ;
no1 = no2;
no2 = temp ;
}
printf("The H.C.F. of %i and %i is %i. \n",copy1,copy2,no1);
return 0;
}
如此下去,直到我輸入5個整數或2個字符連續超過\ n其他。它從不計算H.C.F.然而,如果我刪除了「if」塊,它會起作用。
編輯3:現在我不想閱讀換行符。
第二個if塊檢查負值也不起作用。
您是否試圖讀取兩次變量?如果沒有,在第一個'printf'調用之後移除'scanf'。另外,'%c'不是真的需要。 – Hasturkun
如果你想讀取一個正數(即無符號)整數,爲什麼你使用''%i'''格式代碼(已簽名)?你不應該用'「%u」'來代替嗎? –
@Hasturkun即使刪除它不起作用。 –