(系统: Linux 18.1)
如何通过按下 at scanf()来实现CTRL+D?
当时它只适用于CTRL+C,
然而,我们的任务是通过CTRL+D在scanf()中显式地实现它。
我的职能如下:
float getFloat1()
{
float num = 0.0;
char term;
char loop = 'y';
while (loop == 'y')
{
printf("Please enter a number: ");
if (scanf("%f%c", &num, &term) != 2 || term != '\n')
{
printf("[ERR] Invalid input.\n");
while ((getchar()) != '\n'); // Flushes the scanf() input buffer
}
else
{
printf("[OK] Valid input: %f\n", num);
loop = 'n';
}
}
return num;
}我很感谢任何帮助,链接,参考资料和提示!
发布于 2017-10-22 14:44:08
使用变量来存储扫描的结果。然后比较块中的变量,看看EOF是否被捕获。
float getFloat1()
{
float num = 0.0;
char term;
char loop = 'y';
int result = 0;
while (loop == 'y')
{
printf("Please enter a number: ");
if ((result = scanf("%f%c", &num, &term)) != 2 || term != '\n')
{
if ( result == EOF) {
printf ( "EOF\n");
break;
}
printf("[ERR] Invalid input.\n");
while ((getchar()) != '\n'); // Flushes the scanf() input buffer
}
else
{
printf("[OK] Valid input: %f\n", num);
loop = 'n';
}
}
return num;
}发布于 2017-10-23 08:26:46
本声明如下:
while ((getchar()) != '\n'); 是检查EOF的一个地方。建议:
int ch;
while( ( ch = getchar() ) != EOF && '\n' != ch );关于在调用scanf()时检查EOF,这个问题有点不清楚
https://stackoverflow.com/questions/46875309
复制相似问题