【发布时间】: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_in和time_out之间的比较相同。 -
对于使用 C 语言的人来说,一个技巧是在我们有值时创建一个 printf 来查看我们有什么值。但我同意@JoachimPileborg
-
除了您的实际程序要求两次“时间”之外,因此 if 语句显然有效。由于您不再检查第二个输入,您现在可以输入任何您想要的内容。换句话说,
if应该变成while