【问题标题】:Evaluating boolean with two char variables in c++在 C++ 中用两个 char 变量评估布尔值
【发布时间】:2017-09-30 19:14:14
【问题描述】:

抱歉,这里有点初学者:

我正在制定一个练习计划,以根据一天中的小时和一周中的一天确定长途电话的成本......我已经进入我的 do-while 循环并尝试使用嵌套分行将工作日与周末分开。

但是,当我编译和运行时,if 和 else if 嵌套语句都将被跳过,无论我是否放入与我试图评估的布尔值相对应的字符。我很难理解我在这里缺少什么。说明明确指出一周中的天数应存储在两个 char 变量中:Mo Tu We Th Fr Sa Su。

do
{
    //have user input day of week of call
    printf("\nOn what day was the call made? (Mo, Tu, We, Th, Fr, Sa, or Su) ");
    scanf("%c%c", &day1, &day2);

    //branch for weekday vs weekend vs invalid input
    if (((day1 == 'M') && (day2 == 'o')) || ((day1 == 'T') && (day2 == 'u')) || ((day1 == 'W') && (day2 == 'e')) || ((day1 == 'T') && (day2 == 'h')) || ((day1 == 'F') && (day2 == 'r')))
    {
        //determine if phone call was made at hi or low rate times
        printf("At what time was your call made? (HH MM - with 08 00 representing 8:00 AM and 18 30 representing 6:30 PM) ");
        scanf("%f %f", &call_time_hour, &call_time_minute);
        call_time_hour = call_time_hour + (call_time_minute / 60);

        printf("%f", call_time_hour);
    }
    else if (((day1 == 'S') && (day2 == 'a')) || ((day1 == 'S') && (day2 == 'u')))
    {
        printf("What was the duration of your call? ");
        scanf("%d", &call_duration);

        //calculate total cost of call
        cost_of_call = call_duration * 0.15;

        printf("%s %.2lf", "The cost of this call was $", cost_of_call);
    }
    calls_made--;
    printf("%d", calls_made);
}while (calls_made > 0);

因此,例如,当我编译并运行程序并输入“Sa”作为调用日期时,它会直接转到“calls_made--”步骤。

【问题讨论】:

  • 这看起来更像 C。这是 C 吗?
  • 不,这是c++
  • 在 C++ 中你应该使用 std::coutstd::cin
  • 我正在准备测试,我们被指示同时使用 cout/cin 和 printf/scanf。这个特殊的实践问题表明我们应该尽可能使用 printf/scanf。
  • 在 C++ 程序中,您可以在任何情况下使用printf/scanf 以及cout/cin。但在 C 语言中,您只能使用 printf/scanf

标签: c++


【解决方案1】:

问题是因为以前的scanf。调试并查看真正扫描了哪些字符。我确定day1 将是'\n'

在这种情况下,在扫描星期几之前清除输入流:

while (getchar() != '\n');

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2010-12-25
    • 2020-06-09
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2012-06-04
    相关资源
    最近更新 更多