【发布时间】:2021-06-09 15:29:25
【问题描述】:
我的 .txt 文件中有数据,其中包含员工的不同时间进出。例如,10:20,但我最初将结构设计为使其数据类型为 char 数组或字符串。由于我将在另一个函数中使用时间值,因此我必须使用 atoi() 函数将它们转换为整数值。问题是,每个时间值中都有一个冒号:。是否可以使用 atoi() 将字符串 10:20 转换为整数,以便在以后的函数中使用它? atoi() 的使用是否允许进行一些拆分或某种排序,以便我可以将我的时间值从字符串转换为 int?
我试过了
char time[10] = "10:20";
int val;
printf("string val = %s, int value = %d", time, atoi(time));
但我的输出只有
string val = 10:20, int value = 10 所以只有: 之前的字符串被读取并转换为字符串。我希望在转换之后,我仍然会得到 10:20 作为结果,但是是整数,因为我将使用关系运算符。
【问题讨论】:
-
“我必须使用 atio() 函数将它们转换为整数值”。不,你没有。事实上,你永远不应该使用
atoi,因为它会在某些输入上产生未定义的行为。使用strtol。 -
@Nic:当
time == "10:20"时,您希望val的内容是什么? -
你想用什么整数来表示字符串“10:20”?您想将其转换为午夜过后的分钟数、午夜后的秒数、包含日期的纪元时间,还是其他?
-
@WilliamPursell 无论我是否使用 strtol,问题仍然存在。我的 10:20 字符串在转换后才变成 10。
-
strtol会告诉你10后面的字符的地址。检查这是否是':',转到下一个字符,然后从那里再次调用strtol来转换20。或者如果字符串可以修改,使用strtok将其拆分为由:分隔的标记。
标签: c