【问题标题】:c : How to signal end of inputc : 如何表示输入结束
【发布时间】:2016-08-01 07:26:20
【问题描述】:

在这个提示用户输入多项式的简单程序中,

我使用 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");

【问题讨论】:

  • 不,您必须使用一个永远不能是系数的整数值。如果您可以使用字符串,那么您可以使用一些特定的字符串,例如“END”
  • 扫描一串字符,如果可能,使用转换为int,否则出错或使用非数字字符串值表示终止。
  • 为什么你必须在主操作和循环中使用相同的变量?只需使用单独的循环控制变量。
  • 您是否考虑先询问系数的数量,然后循环获取该数字?

标签: c input key-value


【解决方案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");

【讨论】:

    【解决方案2】:

    您可以等到结束字符到达,它可能是您想要的任何符号(不是数字、CRLF、TAB 等)。在接收到完整的输入字符串后进行处理。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多