gpt4 book ai didi

c - for循环后scanf

转载 作者:行者123 更新时间:2023-11-30 14:41:40 25 4
gpt4 key购买 nike

我不明白为什么如果我插入一个字母,程序会在 for 循环之后执行 printf,而不让我在 for 循环之后插入 scanf 的值for 循环。

    int main()
{
float ascissa, ordinata, d, dis, a[50];
int i=0, j, count = 0;
for(;;){
printf("Inserisci ascissa: (oppure inserisci una lettera per terminare): ");
if(scanf("%f", &ascissa) != 1)
break;
printf("Inserisci ordinata: ");
scanf("%f", &ordinata);
punto p1 = creaPunto(ascissa, ordinata);
printf("Inserisci ascissa: ");
scanf("%f", &ascissa);
printf("Inserisci ordinata: ");
scanf("%f", &ordinata);
punto p2 = creaPunto(ascissa, ordinata);
dis = distanza(p1, p2);
a[i]=dis;
i++;
}
printf("Inserisci d: ");
scanf("%f", &d);
for(j=0; j<i; j++)
if(a[j]<d)
count++;
printf("Coppie che hanno distanza minore di d: %d\n", count);
}

最佳答案

因为当您输入一个字母来中断 for 循环时,输入的值在标准输入缓冲区中仍未被使用。 %f 由于格式匹配失败而不会消耗输入。

您需要自己清除任何此类未使用的输入。例如,您可以有一个清除函数:

void clear_stdin(void)
{
int c;
while ((c = getchar()) != '\n' && c != EOF);
}

并调用它:

printf("Inserisci ascissa: (oppure inserisci una lettera per terminare): ");
if(scanf("%f", &ascissa) != 1) {
clear_stdin();
break;
}

同样,您需要错误检查并清除所有 scanf 调用。

相关:Why does everyone say not to use scanf? What should I use instead?

关于c - for循环后scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com