代码在运行时不能输入内容

#include <stdio.h>

int main()
{

printf("两个时间"); 
int hour1,minute1=0;
int hour2,minute2=0;
scanf("%d %d",hour1, minute1);
scanf("%d %d",hour2, minute2);
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int t=t2-t1;
printf("时间差是%d时%d分",t/60,t&60);
return 0;

}
这个代码在运行的时候为什么输入不了数字

scanf("%d %d",&hour1, &minute1);
scanf("%d %d",&hour2, &minute2);

【以下回答由 GPT 生成】

这段代码无法在运行时输入数字的原因是因为程序在运行时无法获取用户的输入。在代码中,使用了scanf函数来进行输入操作,但是在程序运行时,没有给用户提供输入的机会,所以无法输入数字。

要解决这个问题,可以修改代码,将输入操作改为命令行参数或者使用一个循环来从用户获取输入。下面是两种解决方案的代码示例:

解决方案一: 使用命令行参数

#include <stdio.h>

int main(int argc, char *argv[])
{
    int hour1, minute1 = 0;
    int hour2, minute2 = 0;

    sscanf(argv[1], "%d", &hour1);
    sscanf(argv[2], "%d", &minute1);
    sscanf(argv[3], "%d", &hour2);
    sscanf(argv[4], "%d", &minute2);

    int t1 = hour1 * 60 + minute1;
    int t2 = hour2 * 60 + minute2;
    int t = t2 - t1;

    printf("时间差是 %d 小时 %d 分钟\n", t / 60, t % 60);

    return 0;
}

在命令行中使用以下命令运行代码:

./a.out 9 30 12 45

上面的命令表示输入时间为9点30分和12点45分。

解决方案二: 使用循环获取用户输入

#include <stdio.h>

int main()
{
    printf("两个时间\n");

    int hour1, minute1 = 0;
    int hour2, minute2 = 0;

    printf("请输入第一个时间(小时 分钟):");
    scanf("%d %d", &hour1, &minute1);

    printf("请输入第二个时间(小时 分钟):");
    scanf("%d %d", &hour2, &minute2);

    int t1 = hour1 * 60 + minute1;
    int t2 = hour2 * 60 + minute2;
    int t = t2 - t1;

    printf("时间差是 %d 小时 %d 分钟\n", t / 60, t % 60);

    return 0;
}

以上代码使用了printfscanf函数,在程序运行时会要求用户输入时间。

这样修改后,就可以在运行时输入数字了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你的代码在读取输入时存在问题。scanf函数需要传入变量的地址,而你在调用scanf时直接传入了变量的值。

你应该在scanf函数中使用&运算符来获取变量的地址,这样scanf就能正确地将输入值赋给变量。

以下是修正后的代码:

#include <stdio.h>

int main()
{
    printf("两个时间"); 
    int hour1,minute1=0;
    int hour2,minute2=0;
    scanf("%d %d",&hour1, &minute1); // 注意这里的 & 符号
    scanf("%d %d",&hour2, &minute2); // 注意这里的 & 符号
    int t1=hour1*60+minute1;
    int t2=hour2*60+minute2;
    int t=t2-t1;
    printf("时间差是%d时%d分",t/60,t%60); // 这里应该是取模运算符 %,而不是位与运算符 &
    return 0;
}

另外,你在计算时间差的分钟部分时使用了位与运算符&,应该是取模运算符%。我在上面的修正代码中已经改正了这一点。