【问题标题】:C Char lin1[] = "1234"; PrintF as integerC 字符 lin1[] = "1234"; PrintF 作为整数
【发布时间】:2020-10-24 14:34:29
【问题描述】:

所以我有这个问题我有以下代码:

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');

但它不起作用,解决方案应该与它类似,因为这是一个简单的练习,但我没有看到它!

【问题讨论】:

  • 我看到了两种可能性:printf("main() %s\n", lin1);(将格式说明符更改为%s)和printf("main() %d\n", 1234);。没有实际转换为 int 的情况下,无法从 lin1 保留 %d 的字符串进行打印。除非你应该自己写my_atoi()
  • 我无法更改代码,我必须使用 lin1 打印 1234 完成 sintax

标签: arrays c printf


【解决方案1】:

基本上只是将字符串转换为数字。我还检查了字符串是否真的是 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
);

注意:您应该将char 转换为unsigned char 以使isdigit 具有超级便携性。见前wiki.sei STR37-C

【讨论】:

  • 非常感谢,这真的很管用,对我帮助很大,也很容易理解
  • 聪明!这是我在上面写评论时没有想到的;无论如何,必须说它只适用于四位数长的数字字符串,因此在实际场景中肯定需要my_atoi() 转换函数。 (我不是在批评:我很高兴投票)
【解决方案2】:

您的策略是正确的,但您必须逐个字符地执行...

char lin1[] = "1234";
int i;

printf("main(): ");
for(i = 0; lin1[i]; i++)
     printf("%d", lin1[i] - '0');

【讨论】:

  • 我无法更改已编写的代码以插入 for。这有点棘手,我不知道该怎么做
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多