-1

在 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);
        }
    }
}
4

5 回答 5

6

因为这不是printf工作方式。你想要这个:

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

甚至更好,

std::cout << i;
于 2009-11-24T03:35:44.277 回答
3

如果你使用 C++,你应该使用 cout 而不是 printf:

#include <iostream>
using namespace std;

int main() {
        int i = 42;
        cout << "The answer is: " << i << endl;
}
于 2009-11-24T03:40:01.913 回答
2

通过该声明,您所说的是:“从位置 i 开始有一个刺痛,显示它”当然这不是您想要的。使用格式字符串 %d 打印一个整数

于 2009-11-24T03:44:14.883 回答
2

printf 的工作方式是它采用如下字符串:

printf( "the number is: " );

如果您想要在字符串的最后一部分使用整数,则需要使用转义字符,然后将 int 作为另一个参数传递:

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

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

您还需要包括:

#include <stdio.h>

编辑

对不起,我的术语是错误的, % 后跟一个序列称为转换规范而不是转义字符。

HTH。

于 2009-11-24T03:48:19.540 回答
1

的第一个参数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));.

于 2009-11-24T03:50:40.800 回答