Arrays C Char lin1[]=";1234“;;PrintF作为整数
所以我有这个问题,我有以下代码:Arrays C Char lin1[]=";1234“;;PrintF作为整数,arrays,c,printf,Arrays,C,Printf,所以我有这个问题,我有以下代码: char lin1[] = "1234"; printf("main(): %d\n", __________); // Sould print 1234 from lin1 as an integer 我的目标是使用printf将lin1打印为整数,而不使用atoi或strtol 所以输出应该是1234 我试过了 printf("main() %d\n", lin1 -'0'); 但它不起作用,解
char lin1[] = "1234";
printf("main(): %d\n", __________); // Sould print 1234 from lin1 as an integer
我的目标是使用printf将lin1打印为整数,而不使用atoi或strtol
所以输出应该是1234
我试过了
printf("main() %d\n", lin1 -'0');
但它不起作用,解决方案应该与之类似,因为这是一个简单的练习,但我没有看到它 你的策略是正确的,但你必须一个字符一个字符地做
char lin1[] = "1234";
int i;
printf("main(): ");
for(i = 0; lin1[i]; i++)
printf("%d", lin1[i] - '0');
基本上就是把字符串转换成数字。我还检查了字符串是否为4位数字:
char lin1[] = "1234";
printf("main(): %d\n",
(
isdigit(lin1[0]) &&
isdigit(lin1[1]) &&
isdigit(lin1[2]) &&
isdigit(lin1[3]) &&
lin1[4] == '\0'
) ?
(lin1[0]-'0')*1000 +
(lin1[1]-'0')*100 +
(lin1[2]-'0')*10 +
(lin1[3]-'0')*1
:
-1
);
注意:您应该将
isdigit
的char
转换为unsigned char
,以实现超级便携。请参阅ex我看到了两种可能性:printf(“main()%s\n”,lin1)
(将格式说明符更改为%s
)和printf(“main()%d\n”,1234)代码>。如果不转换为int,就无法从lin1
字符串保持%d
打印。除非您要编写自己的my_atoi()
我无法更改代码,否则我必须使用lin1打印1234以完成sintaxi无法更改已编写的代码以插入for。这有点棘手,我不知道怎么做非常感谢你,这真的很有效,对我帮助很大,而且很容易理解!这是我在上面写评论时没有想到的;无论如何,必须指出的是,它只适用于四位数长的数字字符串,因此在实际场景中肯定需要一个my_atoi()
转换函数。(我不是批评:我很高兴投票)