【问题标题】:If statements not working (Time In and Time Out)如果语句不起作用(超时和超时)
【发布时间】:2016-06-25 02:17:55
【问题描述】:

if 语句似乎不起作用。

例如,如果我在“Time in”或“Time out”中输入2405,则 if 语句不起作用,或者它不执行 if(s) 中的给定语句。

我们知道 2405 大于 2400 为什么它不起作用?我已经尝试更改逻辑运算符,但它不会工作。

我的编译器是 DevC++ 4.9.9.2

这是我的源代码:

#include <windows.h>
#include <stdio.h>
#include <conio.h>

struct record
{
       char computer_code[10];
       int time_in;
       int time_out;
       int time_consumed;
};

int main()
{
    FILE *fp;
    fp = fopen("computer.txt", "w");

    struct record comprec[50];

    int a=0;
    char ans;

    do
    {
        do
        {
              a++;
              printf("\n");
              printf("Computer code: ");
              scanf("%s", comprec[a].computer_code);

              printf("Time in: ");
              scanf("%d", &comprec[a].time_in);
              if(comprec[a].time_in<0000 || comprec[a].time_in>2400)
              {
                                   printf("Time in: ");
                                   scanf("%d", &comprec[a].time_in);
              }

              printf("Time out: ");
              scanf("%d", &comprec[a].time_out);
              if(comprec[a].time_out<0000 || comprec[a].time_out>2400)
              {
                                   printf("Time out: ");
                                   scanf("%d", &comprec[a].time_out);
              }

              if(comprec[a].time_in>comprec[a].time_out)
              {
                                   printf("Time in: ");
                                   scanf("%d", &comprec[a].time_in);
              }

              comprec[a].time_consumed = comprec[a].time_out-comprec[a].time_in;

              printf("\nTime consumed: %0.4d", comprec[a].time_consumed);
              fprintf(fp, "%s    %d  %d  %0.4d\n", comprec[a].computer_code, comprec[a].time_in, comprec[a].time_out, comprec[a].time_consumed);

        }while(a<1);

        printf("\nDo you want to input again?: ");
        scanf("%s", &ans);

    }while(ans == 'Y' || ans == 'y');

    getch();
    return 0;
}

我在程序中的输入:

Computer code: COMP-001
Time in: 2405
Time in: 2406
Time out: 2407
Time out: 2408

Time consumed: 0002
Do you want to input again?: N

预期计划:

Computer code: COMP-001
Time in: 2405
Time in: 2406
Time in: 1200
Time out: 2407
Time out: 2408
Time out: 1247

Time consumed: 0047
Do you want to input again?: N

提前谢谢你们。

【问题讨论】:

  • 请编辑您的问题以包括您为程序提供的完整输入、程序产生的完整实际输出以及程序的预期输出。
  • 您还应该学习如何使用调试器,然后您可以在查看所有变量的值的同时逐行执行代码,并且可能更好地了解哪里出了问题。
  • 最后,在time_out 检查中,您仍然打印time_in。应该是这样,还是只是复制粘贴错误?与time_intime_out 之间的比较相同。
  • 对于使用 C 语言的人来说,一个技巧是在我们有值时创建一个 printf 来查看我们有什么值。但我同意@JoachimPileborg
  • 除了您的实际程序要求两次“时间”之外,因此 if 语句显然有效。由于您不再检查第二个输入,您现在可以输入任何您想要的内容。换句话说,if 应该变成 while

标签: c dev-c++


【解决方案1】:

您应该循环询问 Time-in 和循环询问 Time-out,直到它们被正确输入。您的代码只询问一次,然后输入错误。

    do {
          printf("Time in: ");
    } while (scanf("%d", &comprec[a].time_in)!=1
      || (comprec[a].time_in<0000 || comprec[a].time_in>2400));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2017-08-07
    • 2018-12-27
    • 2012-05-15
    • 2011-02-21
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多