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); } 

在调用strtolendptr指向输入的第一个非数字字符。 如果只输入了数字,则endptr将指向终止该行的\n ,否则如果输入了12x ,则endptr将指向'x'

您可以通过编写GetNumber函数来改进这一点,以便您可以编写

 dim = GetNumber(); 

要么

 dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);