c – 需要替代fflush
我只允许使用标准的c库,所以fpurge()不是我的选择。
int dim = 0; int c = 0; printf("Please enter a number"); while ( (( c = scanf("%d",&dim)) != 1 ) || (dim UCHAR_MAX) ) { if (c == EOF) { return 0; } fflush(stdin); printf("[ERR] Enter a number\n"); printf("Please enter a number"); }
该程序应该读取一个大于一的数字,如果有任何“错误的”输入,如字母,它应该去并传递错误信息。 它适用于我的Windows PC上的fflush,该程序应该在Linux系统上运行。
如何更换程序仍然有效的fflush? 因为当我不使用它时,我进入了一个无限循环。
输入的数字决定了在程序的其余部分中使用某行代码的频率,这就是我需要数组的原因。
你可能想要这样的东西:
#include #include 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
指向输入的第一个非数字字符。 如果只输入了数字,则endptr
将指向终止该行的\n
,否则如果输入了12x
,则endptr
将指向'x'
。
您可以通过编写GetNumber
函数来改进这一点,以便您可以编写
dim = GetNumber();
要么
dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);