gpt4 book ai didi

c - 为什么 scanf 抓取\n?

转载 作者:太空狗 更新时间:2023-10-29 15:26:38 25 4
gpt4 key购买 nike

我正在编写一个基本的 C 程序,可以将摄氏度或华氏度相互转换。

我有一个 scanf 语句,用户在其中输入他们想要转换的温度,然后是一个 printf 语句,询问该温度是 c 还是 f。当我编译时,请求 char c 或 f 的 scanf 而是从之前的 scanf 中获取 \n。根据我的调试器。

代码如下所示:

int celcius(void){
double originalTemp = 0;
double newTemp;
char format;

printf ("enter a temperature: ");
scanf ("%lf",&originalTemp); //what is the original temp?

printf ("enter c if in celcius, enter f if in ferenheit: "); //enter c or f

scanf("%c", &format); //why do I need to do this twice??, this one grabs \n
scanf("%c", &format); //this one will pick up c or f


if (format == 'c'){
newTemp = originalTemp*1.8+32;
printf("%.2lf degrees Farenheit\n", newTemp);
} //convert the Celcius to Ferenheit


else if (format == 'f'){
newTemp = (originalTemp-32)/1.8;
printf("%.2lf degrees Celcius\n", newTemp);
} //convert the Ferenheit to Celcuis

else {
printf ("ERROR try again.\n");
} //error if it isn't f or c

return 0;
}

我错过了什么吗?我知道 scanf 在这种情况下会在输入流中查找下一个字符,但为什么此时 \n 仍在输入流中?除了获取 char 之外,是否有“正确”的方法来解决这个问题?

最佳答案

格式字符串中的空格匹配空格,所以你可以匹配掉/跳过 cr/lf;

printf ("enter c if in celcius, enter f if in ferenheit: "); //enter c or f

scanf(" %c", &format); // get next non white space character, note the space

if (format == 'c'){

关于c - 为什么 scanf 抓取\n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486385/

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