c - 需要 fflush 的替代方案
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 电脑上与 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
指向输入的第一个非数字字符。如果只输入了数字,endptr
将指向终止该行的 \n
,否则如果例如12x
已经输入,endptr
会指向'x'
。
您可以通过编写 GetNumber
函数来改进这一点,这样您就可以只编写
dim = GetNumber();
或
dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);
我只被允许使用标准 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 电脑上与 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
指向输入的第一个非数字字符。如果只输入了数字,endptr
将指向终止该行的 \n
,否则如果例如12x
已经输入,endptr
会指向'x'
。
您可以通过编写 GetNumber
函数来改进这一点,这样您就可以只编写
dim = GetNumber();
或
dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);