我已经知道可以在char数据类型中存储0-255的数字。所以,我尝试了以下代码:
#include <stdio.h>
int main()
{
unsigned char num[4];
int sum=0;
int i=0;
printf("Enter Four Digit Number\n");
while(i<4)
{
scanf("%1d",&num[i]);
i++;
}
sum=(int)num[0]+(int)num[1]+(int)num[2]+(int)num[3];
printf("Sum of digits: %d",sum);
return 0;
}
似乎运行正常但是只要我在while循环中放入以下代码,每次循环重复和代码中断时i
的值都会变为零:
sum=sum+(int)(num[i]); i++;
我在minGW编译器中使用code :: blocks。
答案 0 :(得分:2)
使用字符类型存储数字时要非常小心。 signed char
的范围可能因编译器和操作系统而异。大多数情况下,最小值为-128,最大值为127.在其他情况下,它可能不同。当您期望范围为0-255时,这可能会成为问题。如果您想使用char
来存储号码,请使用unsigned char
,因为它的范围是0-255。
因为字符(有符号或无符号)的数字表示不是通用的,所以我通常通过编写一个使用数组来分配和查找数值的函数来解决问题。 (但是,我几乎从不这样做,使用整数更容易......)
答案 1 :(得分:-1)
如果要将整数值添加到特定索引
中char a[10];
int i=9;
a[2]=boost::lexical_cast<char>(i)
发现这是将char转换为int的最佳方法,反之亦然。
答案 2 :(得分:-2)
这对我来说很好。
while(i < 4){
scanf("%1d", &num[i]);
sum += (int)(num[i++]);
}