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()
转换函数。(我不是批评:我很高兴投票)