所以我必须像一个计时器一样,它必须是一个字符串,并且如果它小于10,则必须有一个0,这样就像00,01,02 ... 09,10,11数字是2位数字。但是我遇到了一个问题,我似乎无法解决。而且我需要使其有点像没有ctime或完全不将其转换为字符串。
我也使用反编译器工具尝试过几次,但是我发现主要问题出在位置4和7。我认为代码块编译器可能有问题,但是我不确定
#include <stdio.h>
int main(){
char tostring[9]={};
int timer=6588;
int hours=0;
int minutes=0;
int seconds=0;
hours=timer/3600;
minutes=(timer%3600)/60;
seconds=(timer%3600)%60;
//printf("%i:%i:%i",hours,minutes,seconds);
if(hours<10){
tostring[0]=(char)0;
tostring[1]=(char)hours;
}else{
tostring[0]=(char)(hours/10);
tostring[1]=(char)(hours%10);
}
tostring[2]=':';
if(minutes<10){
tostring[3]=(char)0;
tostring[4]=(char)minutes;
}else{
tostring[3]=(char)(minutes/10);
tostring[4]=(char)(minutes%10);
}
tostring[5]=':';
if(seconds<10){
tostring[6]=(char)0;
tostring[7]=(char)seconds;
}else{
tostring[6]=(char)(seconds/10);
tostring[7]=(char)(seconds%10);
}
tostring[8]='\0';
printf("%s",tostring);
return 0;
}
我希望输出为01:49:48,但是什么也没出现,只是空白。解决该问题的解决方案是什么。
答案 0 :(得分:2)
相反,为什么不打印具有固定宽度并用0
填充的整数?
类似
printf("%02i:%02i:%02i",hours,minutes,seconds);
应该做这项工作。
格式规范%02i
的解释:
%
转换说明符的开始0
前0
个用于填充(如果该值的实际长度小于最小字段宽度)2
值。i
整数修改后的代码:
#include <stdio.h>
int main(void){
int timer=6588;
int hours=0;
int minutes=0;
int seconds=0;
hours=timer/3600;
minutes=(timer%3600)/60;
seconds=(timer%3600)%60;
printf("%02i:%02i:%02i",hours,minutes,seconds);
return 0;
}
答案 1 :(得分:2)
tostring[0]=(char)0;
不会将0
的字符表示形式写入tostring [0]。它写一个零。您想要tostring[0] = '0'
,并用单引号引起来。同样,要写一个数字的字符表示形式,可以写tostring[1] = '0' + hours
(如果小时数是5,则“ 0” + 5是用于表示本地字符集中的5
的字符值值得庆幸的是,很早以前就已经标准化了这些表示形式,这些表示形式应该是顺序的,这样才能起作用。)但是,除非本练习的目的是避免使用printf,否则实际上应该只使用printf。