在 C 编程中 - 如何在此 if 语句中断循环后获取新的 scanf 输入
In C programming - How to get new scanf input after this if statement breaks the loop
这是我的代码的第一部分。输入一个包含 5 个数字的数组。然后它把它们写出来并累积起来。
如果没有输入数字,我想使用 goto TAG 重新进入循环。问题是当 for 循环被一个非数值打断并写入“那不是一个数字”时,我没有被要求输入另一个值——它只是进入了一个无限循环。
我该如何解决这个问题?
int main(){
double i;
const int ARRAYSIZE = 5;
double array1[ARRAYSIZE];
double array2[ARRAYSIZE];
TAG:
printf("Input a total of %d. numbers.\n", ARRAYSIZE);
printf("The numbers will be accumulated:\n");
fflush(stdout);
for(int i = 0; i < ARRAYSIZE; i++){
if(scanf("%lf", &array1[i]) != 1)
{
printf("That is not a number - try again\n");
goto TAG;
}
}
对于初学者这个变量和这个数组
double i;
double array2[ARRAYSIZE];
没有在程序中使用。
使用 goto
语句是一种糟糕的编程习惯。
您的代码可以重写,例如以下方式
#include <stdio.h>
int main(void)
{
enum { ARRAYSIZE = 5 };
double array1[ARRAYSIZE];
printf( "Input a total of %d. numbers.\n", ARRAYSIZE );
puts( "The numbers will be accumulated:" );
for ( int i = 0; i < ARRAYSIZE; i++ )
{
int success;
while ( ( success = scanf( "%lf", array1 + i ) ) != 1 )
{
printf("That is not a number - try again\n");
scanf( "%*[^\n]%*c" );
}
}
for ( int i = 0; i < ARRAYSIZE; i++ )
{
printf( "%f ", array1[i] );
}
putchar( '\n' );
return 0;
}
程序输出可能看起来像
Input a total of 5. numbers.
The numbers will be accumulated:
1
A
That is not a number - try again
2
B
That is not a number - try again
3
C
That is not a number - try again
4
D
That is not a number - try again
5
1.000000 2.000000 3.000000 4.000000 5.000000
这是我的代码的第一部分。输入一个包含 5 个数字的数组。然后它把它们写出来并累积起来。
如果没有输入数字,我想使用 goto TAG 重新进入循环。问题是当 for 循环被一个非数值打断并写入“那不是一个数字”时,我没有被要求输入另一个值——它只是进入了一个无限循环。
我该如何解决这个问题?
int main(){
double i;
const int ARRAYSIZE = 5;
double array1[ARRAYSIZE];
double array2[ARRAYSIZE];
TAG:
printf("Input a total of %d. numbers.\n", ARRAYSIZE);
printf("The numbers will be accumulated:\n");
fflush(stdout);
for(int i = 0; i < ARRAYSIZE; i++){
if(scanf("%lf", &array1[i]) != 1)
{
printf("That is not a number - try again\n");
goto TAG;
}
}
对于初学者这个变量和这个数组
double i;
double array2[ARRAYSIZE];
没有在程序中使用。
使用 goto
语句是一种糟糕的编程习惯。
您的代码可以重写,例如以下方式
#include <stdio.h>
int main(void)
{
enum { ARRAYSIZE = 5 };
double array1[ARRAYSIZE];
printf( "Input a total of %d. numbers.\n", ARRAYSIZE );
puts( "The numbers will be accumulated:" );
for ( int i = 0; i < ARRAYSIZE; i++ )
{
int success;
while ( ( success = scanf( "%lf", array1 + i ) ) != 1 )
{
printf("That is not a number - try again\n");
scanf( "%*[^\n]%*c" );
}
}
for ( int i = 0; i < ARRAYSIZE; i++ )
{
printf( "%f ", array1[i] );
}
putchar( '\n' );
return 0;
}
程序输出可能看起来像
Input a total of 5. numbers.
The numbers will be accumulated:
1
A
That is not a number - try again
2
B
That is not a number - try again
3
C
That is not a number - try again
4
D
That is not a number - try again
5
1.000000 2.000000 3.000000 4.000000 5.000000