[英]c - need an alternative for fflush
我只允許使用標准的c庫,所以fpurge()不是我的選擇。
int dim = 0;
int c = 0;
printf("Please enter a number");
while ( (( c = scanf("%d",&dim)) != 1 ) || (dim < 1) || (dim > UCHAR_MAX) )
{
if (c == EOF)
{
return 0;
}
fflush(stdin);
printf("[ERR] Enter a number\n");
printf("Please enter a number");
}
該程序應讀取大於1的數字,並且如果存在字母之類的“錯誤”輸入,則該程序應該會發出錯誤消息。 它在我的Windows pc上與fflush一起使用,使程序應在Linux系統上運行。
我該如何替換仍能正常工作的fflush? 因為當我不使用它時,我會陷入無限循環。
輸入的數字確定在程序的其余部分中使用某行代碼的頻率,這就是為什么我需要數組的原因。
您可能想要這樣的東西:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int dim = 0;
for (;;)
{
printf("Please enter a number: ");
char buffer[30];
fgets(buffer, sizeof(buffer), stdin);
char *endpointer;
dim = strtol(buffer, &endpointer, 10);
if (*endpointer != '\n' || (dim < 1) || (dim > UCHAR_MAX))
{
printf("[ERR] Enter a number\n");
continue;
}
break;
}
printf("The number you entered is: %d\n", dim);
}
調用strtol
, endptr
指向輸入的第一個非數字char。 如果僅輸入數字, endptr
將指向終止行的\\n
,否則,例如,如果輸入12x
,則endptr
將指向'x'
。
您可以通過編寫GetNumber
函數來改善這一點,這樣您就可以編寫
dim = GetNumber();
要么
dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.