函数atoi返回错误的数字

时间:2018-03-29 03:21:29

标签: c

我写了以下代码:

#include <stdio.h>
#include <stdlib.h>

void main (void) {

//------------------------ Variaveis------------------------//
    char num[2];
    int aux1, aux2, aux3;

//------------------------Parte grafica---------------------//
    printf ("Escreva um numero de 0 a 99: ");
    scanf ("%s", &num);
    printf("\nEste numero por extenso eh: ");

//-------------------------Conversão------------------------//
    aux1 = atoi(num);
    aux2 = atoi(&num[0]);
    aux3 = atoi(&num[1]);

不要介意语言,重点是,如果你输入的数字类似于&#34; 56&#34;例如,对于scanf来说,aux2获得&#34; 56&#34;的值。而不是&#34; 5&#34;我想要的,而aux3获得&#34; 6&#34;这实际上是我的预期。 aux2有什么问题?

2 个答案:

答案 0 :(得分:3)

通过为null终止符添加空格来修复未定义的行为后,让我们考虑一下程序的行为。

  

aux2有什么问题?

由于atoi会考虑整个字符串,aux2aux相同,因为它是从'5'开始并继续'\0'的字符串。< / p>

如果您想获得个别数字,请使用减法'0'

int aux2 = num[0] - '0';
int aux3 = num[1] - '0';

确保num只有两个字符,两个字符都是数字。

答案 1 :(得分:2)

您有未定义的行为,因为当您在char num[3];中输入2位数字值作为字符串时,您没有空终止符的空格

将其更改为char num [3]并输入为:

scanf ("%2s", num);

打印时

printf("%d %d %d\n",aux1,aux2,aux3); // for input 56

你会得到56 56 6 原因是num&num[0]相同,它们指向同一地址,而&num[1]指向下一个地址,因此你得到6