在for循环中,我试图用printf打印电流i的值。这条线:printf((char *) i);是给我运行时错误。这是为什么呢?!

下面是这样一个快速fizzbuzz溶液:

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);
        }
    }
}
有帮助吗?

解决方案

由于这不是printf如何工作的。你想这个代替:

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

甚至更好,

std::cout << i;

其他提示

如果您使用C ++,则应该使用COUT代替printf的:

#include <iostream>
using namespace std;

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

通过这句话你告诉的是:“有一种刺痛起始地址为我,显示它”肯定不是你预期什么。使用格式字符串%d打印整数

printf的工作的方式是,它需要这样的字符串:

printf( "the number is: " );

如果您想要再在你需要使用转义字符,然后将字符串的最后一节的整数关口的int类型作为另一个paramater:

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

有更多的信息这里的转义字符的就可以使用。

您还需要包括:

#include <stdio.h>

修改

对不起我的术语是错误的,随后的序列%被称为的转换规范不逃逸characer。

HTH。

printf()的第一个参数是一个C语言风格的空终止字符串。它的意思被用作格式(因此“F”)与%格式化序列打印剩余的参数。

通过使用printf((char *) i);是指要求电脑打印的每一个字节开始在地址i点,直到遇到一个空。不幸的是,由于i通常用于计数器,它可能指向非常低的内存。大多数现代操作系统禁止访问从用户空间程序,以防止虫子从创建安全漏洞,例如内存,并会发送信号给得罪程序。到这样的信号的默认响应,除非你陷阱它,是杀死的过程。

要代替显示使用i存储在printf("%d\n", i);的数量,。要显示i的值作为一个字符,尝试putc((char)i);printf("%c\n", i);。如果真的i是一个指向一个字符,尝试putc((char)(*i));

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top