扫描导致分段错误 - 输入上的时间

  • 本文关键字:时间 分段 错误 扫描 c
  • 更新时间 :
  • 英文 :


我在编写的基本代码上遇到了一些问题,在结构上操作时,它应该是以下格式的输入小时hh::mm。

有人可以告诉我应该如何扫描这种类型的输入以使其进入结构数组吗?

#include <stdio.h>
struct Time 
{
int hour; 
int minutes; 
}t_time[2]; 
int main()
{
puts("Please enter first hour in the following format hh::mmn"); 
scanf("%d::%d", t_time[1].hour, t_time[1].minutes); 
puts("Please enter second hour in the following format hh::mmn"); 
scanf("%d::%d", t_time[1].hour, t_time[1].minutes); 
return 0;
}

scanf()参数应该是指针。您应该在变量名称前面加上运算符&如下所示:

scanf("%d::%d", &t_time[1].hour, &t_time[1].minutes);

另外,在第一个scanf()中,你应该传递数组t_time的第0索引。

附加:

puts()会自动在末尾附加换行符。您无需在传递给puts()的字符串末尾显式添加n

首先,您两次都使用相同的索引1。您需要对第一个元素使用索引0,对第二个元素使用索引1

其次,您将数组元素的值传递给scanf()scanf()需要它们的地址。为此,请使用一元运算符&地址:

#include <stdio.h>
struct Time {
int hour;
int minutes;
} t_time[2];

int main(void) {
puts("Please enter first hour in the following format hh::mm");
scanf("%d::%d", &t_time[0].hour, &t_time[0].minutes);
puts("Please enter second hour in the following format hh::mm");
scanf("%d::%d", &t_time[1].hour, &t_time[1].minutes);
printf("%d::%dn", t_time[0].hour, t_time[0].minutes);
printf("%d::%dn", t_time[1].hour, t_time[1].minutes);
return 0;
}

最新更新