如何表示输入结束(关于c语言)

3
在这个简单的程序中,提示用户输入一个多项式。
我使用int 999作为表示输入结束的值。
然而,这不是一个好的设计,因为用户将无法输入一个系数为999的多项式节点。
是否有另一种唯一的键可以代表输入结束?
相关代码:
int coeff;
int expon;
int i = 1;

printf("\nInput for polyNode %d  (999 for exit):",i);
printf("\n\tInput coeff : ");
scanf("%d",&coeff);

while(coeff != 999)
{
    printf("\tInput expon : ");
    scanf("%d",&expon);
    insertBack(&polynomial, &polynomialRear, coeff, expon);

    i++;
    printf("\nInput for polyNode %d  (EOF for exit):",i);
    printf("\n\tInput coeff : ");
    scanf("%d",&coeff);
}

printPoly(polynomial);
printf("\n");

2
不,你必须使用一个永远不会成为系数的整数值。如果可以使用字符串,则可以选择一些特定的字符串,例如“END”。 - Priyansh Goel
1
扫描一个字符串,如果可能的话,使用int进行转换,否则报错或使用非数字字符串值表示终止。 - Bathsheba
2
为什么你必须在主操作和循环中使用相同的变量?只需使用单独的循环控制变量即可。 - Sourav Ghosh
你是否考虑先询问系数的数量,然后再循环该数量? - Harald
2个回答

1
您可以检查scanf的返回值。如果扫描成功,在这种情况下,它将返回1表示已扫描一个项目。如果扫描失败,它将返回0或EOF。输入任何非整数值(字母...)都会结束while (1)循环。
然后在while循环中使用getchar()清除输入流。
int coeff;
int expon;
int i = 1;

while(1)
{
    printf("\nInput for polyNode %d :",i);
    printf("\n\tInput coeff : ");
    if ( ( scanf("%d",&coeff)) != 1) {
        break;
    }

    printf("\tInput expon : ");
    if ( ( scanf("%d",&expon)) != 1) {
        break;
    }

    insertBack(&polynomial, &polynomialRear, coeff, expon);

    i++;
}
while ( ( i = getchar ()) != '\n' && i != EOF) ;//clear input stream

printPoly(polynomial);
printf("\n");

0

您可以等待直到接收完整的输入字符串,它可以是任何您希望的符号(不是数字、CRLF、TAB等)。在接收完整的输入字符串后进行处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接