我在c中编写一个简单的任务提醒程序,在一定的时间后打印给定的任务。以下是我遇到问题的一小部分代码。基本上我遇到了scanf()的问题,因为这个函数很奇怪。
#include <stdio.h>
#include <time.h>
int main(){
int hour,minute,curr_time,end_time;
printf("input the hour and minute after which alarm will start in HH:MM : \n");
scanf("%d:%d", &hour,&minute);
char task[50];
printf("Name of the task: \n");
scanf("%s" , task);
printf("your task is %s" , task);
return 0;
}
现在,当我编译并运行程序时,会发生以下情况。
~$ ./a.out
input the hour and minute after which alarm will start in HH:MM :
00.56
Name of the task:
your task is .56
我无法输入任务的名称。一旦我完成了小时和分钟,程序结束时不会输入任务。
答案 0 :(得分:1)
您在:
中使用scanf
作为分隔符,但在输入您时会重新输入小数。由于scanf
期望整数,因此它会在第一个小数点停止扫描。
您可以通过打印来查看hours
和minutes
的价值
#include <stdio.h>
#include <time.h>
int main(){
int hour,minute,curr_time,end_time;
printf("input the hour and minute after which alarm will start in HH:MM : \n");
scanf("%d:%d", &hour,&minute);
char task[50];
printf("Name of the task: \n");
scanf("%s" , task);
printf("your task is %s" , task);
printf("hour is %d" , hour);
printf("minute is %d" , minute);
return 0;
}
输出:
input the hour and minute after which alarm will start in HH:MM :
00.56
Name of the task:
your task is .56
hour is 0
minute is 0
将scanf
中的分隔符更改为小数,或将您的小时和分钟输入为00:56
input the hour and minute after which alarm will start in HH:MM :
00:56
Name of the task:
test
your task is test
hour is 0
minute is 56
答案 1 :(得分:0)
考虑使用FGET而不是scanf。在您输入时间之后,您将在缓冲区中留下换行符。当scanf以字符串形式读取时,它会抓取换行符。看起来好像它跳过了你的输入。
答案 2 :(得分:0)
您的代码只有粗心的错误。这就是 scanf中缺少&符号。
&在scanf中起特殊作用。它表示需要存储值的地址。
但是,此缺席不会显示任何错误。
由于这个原因,您得到输出作为最后输入的值,直到到达换行符,即.56
注意,在某些情况下,它会使整个程序出现故障。