我是C的新手,需要一些帮助。 我想将所有零保存到变量中。
E.g:
int number1 = 0;
int number2 = 0;
int number3 = 0;
printf("Please enter the number in the following format( int,int,int)");
scanf("%d,%d,%d", &number1, &number2, &number3);
// Let's say user enters 1,000,000 (a million)
// I want to be able to print each of the numbers such as
// number1 = 1
// number2 = 000
// number3 = 000
当我为1,000,000做一个printf语句时,我只得到1,0,0
我的最终目标是将该十进制数转换为二进制数
感谢您的帮助。
答案 0 :(得分:3)
如果要保留前导零,则应将值读取为字符串,而不是整数。
答案 1 :(得分:2)
发布的代码正在读取三个整数,以逗号分隔。
自然,结果是1和0和0
关于这个陈述:
// Let's say user enters 1,000,000 (a million)
我们可以把它读成百万,但是发布的代码(读取三个整数,用逗号分隔)只能看到1和0和0
要保留所有零,请将整个输入作为char数组读取。然后通过先挤出逗号然后转换为单个整数来解析生成的char数组中的实际数字。
编辑:
建议的算法来解析实际值
char buffer[100];
int inputNum;
if( fgets(buffer, sizeof(buffer), stdin) )
{
for( char *source = buffer, char *destination = buffer;
*source;
source++ )
{
if( isdigit( *source ) )
{
*destination = *source;
destination++;
}
}
*destination = '\0';
inputNum = atoi( buffer );
}
有更简单的方法,例如:
char buffer[100];
int inputNum = 0;
if( fgets(buffer, sizeof(buffer), stdin) )
{
for( int i=0; buffer[i]; i++)
{
if( isdigit(buffer[i])
{
inputNum *= 10;
inputNum += (buffer[i] - '0');
}
}
}
答案 2 :(得分:2)
试试这个:
char number1[80];
char number2[80];
char number3[80];
printf("Please enter the number in the following format(int,int,int)\n");
scanf(" %[0-9] , %[0-9] , %[0-9]", number1, number2, number3);
printf("%s, %s, %s", number1, number2, number3);
要将字符串转换为int
,您可以编写atoi(numberx)