Pergunta

Como o C alça de conversão entre números inteiros e personagens? Digamos que você tenha declarado uma variável inteira e pedir ao usuário para um número, mas eles seqüência de uma entrada em seu lugar. O que aconteceria?

Foi útil?

Solução

A entrada do utilizador é tratada como uma cadeia que tem de ser convertido para um int usando atoi ou outra função de conversão. Atoi retornará 0 se a cadeia não pode ser interptreted como um número, pois contém letras ou outros caracteres não numéricos.

Você pode ler um pouco mais na documentação atoi no MSDN - http://msdn.microsoft.com/en-us/library/yd5xkb5c (VS.80) .aspx

Outras dicas

Uh? Você sempre seqüência de uma entrada. Então você analisar converter essa string para número, com várias formas (pedindo de novo, tomando um valor padrão, etc.) de lidar com vários erros (estouro, chars incorretas, etc.).

Outra coisa a notar é que em C, caracteres e números inteiros são "compatíveis" em algum grau. Qualquer personagem pode ser atribuído a um int. O inverso também funciona, mas você vai perder informações se o valor inteiro não se encaixa em um char.

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff)

Como outras pessoas têm notado, os dados são normalmente introduzido como uma cadeia - a única questão é qual a função é usada para fazer a leitura. Se você estiver usando uma GUI, a função já pode lidar com a conversão para número inteiro e relatar os erros e assim em uma maneira apropriada. Se você está trabalhando com a Norma C, é geralmente mais fácil de ler o valor em uma string (talvez com fgets() e depois converter Embora atoi() pode ser usado, raramente é a melhor escolha;. O problema é determinar se a conversão teve êxito ( e produziu zero porque o usuário digitou uma representação legítima de zero) ou não.

Geralmente, strtol() uso ou um de seus parentes (strtoul(), strtoll(), strtoull()); para converter os números de ponto flutuante, o uso strtod() ou uma função semelhante. A vantagem das rotinas de conversão inteiro incluem:

  • selecção de base opcional (por exemplo, a base 10, ou a base 10 - hex, ou base 8 - octal, ou qualquer um dos acima, utilizando as convenções padrão C (007 para octal, 0x07 para hex, 7 para decimal)
  • detecção de erros opcional (por saber onde parou a conversão).

O lugar que eu vá para muitas destas especificações de função (quando eu não olhar para a minha cópia da norma C real) é o POSIX web site (que inclui funções C99). É Unix-centric em vez do Windows-centric.

O programa iria falhar, você precisa chamar a função atoi.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top