Pergunta

Em um loop for, estou tentando usar o PrintF para imprimir o valor atual do i. Está linha: printf((char *) i); está me dando erros de tempo de execução. Por que é isso?!

Abaixo está uma solução rápida do FizzBuzz que está fazendo isso:

void FizzBuzz()
{
    for (int i = 0; i < 20; i++)
    {
        printf((char *)i);
        if ((i % 3 == 0) && (i % 5 == 0))
        {
            printf("FizzBuzz \n");
        }
        else if (i % 3 == 0)
        {
            printf("Fizz \n");
        }
        else if (i % 5 == 0)
        {
            printf("Buzz \n");
        }
        else 
        {
            printf("%d\n", i);
        }
    }
}
Foi útil?

Solução

Porque não é assim printf funciona. Você quer isso: em vez disso:

printf("%d\n", i);

Ou ainda melhor,

std::cout << i;

Outras dicas

Se você estiver usando C ++, use o cout em vez de printf:

#include <iostream>
using namespace std;

int main() {
        int i = 42;
        cout << "The answer is: " << i << endl;
}

Por essa afirmação, o que você está dizendo é: "Há uma picada começando no local I, exiba" certamente não é isso que você pretendia. Use formato string %d para imprimir um número inteiro

A maneira como o printf funciona é que é necessário uma string como esta:

printf( "the number is: " );

Se você deseja um número inteiro na última seção da string, você precisa usar um personagem de fuga e depois passar o INT como outro paramater:

printf( "the number is %d", i );

Há mais informações aqui nos caracteres de fuga que você pode usar.

Você também precisará incluir:

#include <stdio.h>

EDITAR

Desculpe, minha terminologia estava errada, % seguido de uma sequência é chamado de Especificação de conversão Não é um personagem de fuga.

Hth.

O primeiro argumento de printf() é uma corda terminada em nulo no estilo C. É para ser usado como formato (assim o "f") com % Formatando sequências para imprimir os argumentos restantes.

Usando printf((char *) i); Você está instruindo o computador a imprimir todos os bytes começando no endereço que i aponta, até que encontre um nulo. Infelizmente, dado isso i Geralmente é usado para contadores, provavelmente aponta para uma memória muito baixa. A maioria dos sistemas operacionais modernos proíbe o acesso a essa memória de programas de espaço do usuário para impedir que os bugs criem orifícios de segurança e enviam sinais para programas ofensivos. A resposta padrão a esse sinal, a menos que você a prenda, é matar o processo.

Para exibir o número armazenado em i, usar printf("%d\n", i);. Para exibir o valor de i Como personagem, tente putc((char)i); ou printf("%c\n", i);. Se i Realmente é um ponteiro para um personagem, tente putc((char)(*i));.

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