gpt4 book ai didi

c - 为什么当我在 C 程序的 while 循环中有 2 个 scanf 语句时,在 1 个循环之后只有其中一个会运行?

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

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>

double FindPopulation(char);

void main()
{
char state;
double population;
int flag = 1;

while(flag == 1)
{

printf("This program will display the population for any New England state. \n");

printf("e=ME, v=VT, n=NH, m=MA, c=CT, r=RI\n");

printf("Enter the state using the above symbols: ");

scanf("%c", &state);

printf("You entered %c \n", state);

population = FindPopulation(state);

if (population == 0)
{
printf("You have entered a invalid state!\n");
}

else

printf("This state has a population of %.2f million!!\n", population);

printf("To quit please enter the number 0, to run this program again please enter the number 1: ");

scanf("%d", &flag);

}

}

double FindPopulation(char s)
{

double pop;

switch (s)
{
case 'e': pop = 1.34;
break;

case 'v': pop = 0.63;
break;

case 'n': pop = 1.36;
break;

case 'm': pop = 6.90;
break;

case 'c': pop = 3.57;
break;

case 'r': pop = 1.06;
break;

default: pop = 0;
}

return pop;

}

我是 C 新手,以前从未在 C 中使用过 while 循环。无论如何,这个想法是,有 2 个 scanf,其中一个要求用户输入以带回正确的状态总体,另一个 scanf 将是一个打破 while 循环的标志。标志 scanf 工作得很好。如果我输入 0 它将跳出循环并结束程序。如果我输入 1 它将继续循环。但是,第一个循环之后的第一个 scanf 将停止工作。它不会要求其他用户输入。相反,它会跳过自身并打印输出:

“使用以上符号输入状态:您输入了”

对于第二个 scanf,即使在多次迭代之后,我也可以随时按 0 退出。

有人可以告诉我为什么一个 scanf 工作正常,而另一个则失败?

最佳答案

当您第一次使用 scanf 将字符输入到变量 state 时,它会将其存储到 state 中。然后,您可以使用 scanf 获取标记的输入。如果按 0 和 Enter 键,则 0(int)将存储在 flag 中,而 \n 则保留在文件 stdin 中。

下一个 scanf 从 stdin(标准输入文件)获取字符(%c),并且由于 \n 是 stdin 中的第一个字符,因此它会放入 \n 处于状态。由于您的函数 FindPopulation() 不将 \n 作为有效输入,因此会显示错误。

可以通过在 scanf("%d", &flag); 后面加上 getchar(); 来解决。
getchar(); 从标准输入中获取字符,即从标准输入中删除 \n
你也可以使用while((c = getchar()) != '\n' && c != EOF); 删除标准输入中的所有字符。

关于c - 为什么当我在 C 程序的 while 循环中有 2 个 scanf 语句时,在 1 个循环之后只有其中一个会运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55409678/

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