c中的任务提醒程序

时间:2015-10-29 15:04:11

标签: c string scanf

我在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

我无法输入任务的名称。一旦我完成了小时和分钟,程序结束时不会输入任务。

3 个答案:

答案 0 :(得分:1)

您在:中使用scanf作为分隔符,但在输入您时会重新输入小数。由于scanf期望整数,因此它会在第一个小数点停止扫描。

您可以通过打印来查看hoursminutes的价值

#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

注意,在某些情况下,它会使整个程序出现故障。