【发布时间】:2019-12-25 16:40:53
【问题描述】:
我正在尝试创建一个简单的转换器,它会要求用户输入数据 n 次。理想情况下,循环中的scanf() 应允许用户在终端中输入响应,按回车键,然后传递输出,然后再次询问....n 次。但是到目前为止,该程序只询问一次,并且不允许用户再次询问。
在我看到的循环中有很多关于scanf 的posts,但我无法将我的问题与其中任何一个联系起来。
我是 C 新手,来自 Java。
#include <stdio.h>
double feet(double m);
double lbs(double g);
double f(double c);
//double askInput(int num);
int main()
{
int num, i;
i = 0;
printf("how many?\n");
scanf("%i\n", &num);
for(i = 0; i < num; i++)
{
double input = 0.0;
double output;
char unit = NULL;
printf("num to convert, units to convert?\n");
//scanf("%lf %c\n", &input, unit);
if(input == 0.0 && unit == NULL)
{
//input = askInput(num);
scanf("%lf %c\n", &input, unit);
}
//meters to feet
if(unit == 'm')
{
output = feet(input);
}
}
我尝试了很多方法。我试过使用while循环,我试过把scanf放在一个单独的函数中,然后也使用if语句。我想我不太了解scanf 的工作原理。
【问题讨论】:
-
请注意,
NULL在技术上是一个指针,因此分配char unit = NULL;是不好的做法。你想要的是char unit = '\0';,因为'\0'是NUL 字符。并且不需要围绕scanf的if语句。相反,您需要一个if语句来验证scanf返回 2,例如if (scanf("%lf %c", &input, &unit) != 2) break;