如何通过在 scanf() 中按 [CTRL]+[D] 来实现 EOF?
How can i achieve an EOF by pressing [CTRL]+[D] at scanf()?
(系统:Linux Mint 18.1)
如何通过在 scanf()
处按 [CTRL]+[D] 来实现 EOF?
当时只适用于[CTRL]+[C],
然而我们的任务是通过 scanf()
中显式 [CTRL]+[D] 来实现它。
我的函数如下:
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;
}
非常感谢任何帮助、链接、参考和提示!
使用一个变量来存储scanf的结果。然后比较block中的变量,看是否捕获到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;
}
这条语句:
while ((getchar()) != '\n');
将是检查 EOF 的地方。建议:
int ch;
while( ( ch = getchar() ) != EOF && '\n' != ch );
关于在调用 scanf()
时检查 EOF 的问题有点不清楚
(系统:Linux Mint 18.1)
如何通过在 scanf()
处按 [CTRL]+[D] 来实现 EOF?
当时只适用于[CTRL]+[C],
然而我们的任务是通过 scanf()
中显式 [CTRL]+[D] 来实现它。
我的函数如下:
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;
}
非常感谢任何帮助、链接、参考和提示!
使用一个变量来存储scanf的结果。然后比较block中的变量,看是否捕获到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;
}
这条语句:
while ((getchar()) != '\n');
将是检查 EOF 的地方。建议:
int ch;
while( ( ch = getchar() ) != EOF && '\n' != ch );
关于在调用 scanf()