标签: printf

Java:将二维字符串数组打印为右对齐表

将数组的单元格打印为右对齐表格的最佳方法是什么String[][]?例如,输入

{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
Run Code Online (Sandbox Code Playgroud)

应该产生输出

  x xxx
yyy   y
 zz  zz
Run Code Online (Sandbox Code Playgroud)

这似乎是人们应该能够使用 完成的事情java.util.Formatter,但它似乎不允许非常数的字段宽度。最佳答案将使用一些标准方法来填充表格单元格,而不是手动插入空格字符。

java formatting printf

3
推荐指数
1
解决办法
1万
查看次数

以下c程序的输出为-10的原因

#include <stdio.h>

int main() {
    unsigned int a = -10;
    printf("a=%d\n", a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是打印-10签名int.如果签名和未签名都打印,-10那么它们之间有什么区别?

c printf format-specifiers unsigned-integer

3
推荐指数
2
解决办法
108
查看次数

将方括号(“(”)放入printf代码有什么问题?

我刚刚开始C编程,对以下代码有疑问。

#include <stdio.h>

int main(void)
{
    int num1, num2, num3;
    int result;

        printf("(num1 - num2) x (num2 + num3) x (num3 % num1) \n");
    printf("Insert 3 numbers: ");
    scanf("%d %d %d", &num1, &num2, &num3);

    result = (num1 - num2) * (num2 + num3) * (num3 % num1);
    printf("Answer: %d ", result);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

每当我放置以下单行代码时,就会发生错误:

  printf("(num1 - num2) x (num2 + num3) x (num3 % num1) \n");
Run Code Online (Sandbox Code Playgroud)

我将其放入其中的原因是因为我想打印此方程式,但是每当我放入该方程式时都会发生错误。错误消息似乎表明方括号的使用存在问题,但我不知道为什么要放入括号成为一个问题。

我希望输出是

  (num1 - num2) x (num2 + num3) x (num3 % num1) …
Run Code Online (Sandbox Code Playgroud)

c printf

3
推荐指数
1
解决办法
66
查看次数

为什么在缺少width参数时fprintf导致内存泄漏并无法正常运行

以下简单程序的行为异常。有时它打印“ 0.00000”,有时它打印的“ 0”超出我的计算。有时,它会耗尽系统上的所有内存,然后系统要么终止某些进程,要么由于bad_alloc失败。

#include "stdio.h"

int main() {
  fprintf(stdout, "%.*f", 0.0);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是fprintf的不正确用法。应该有另一个参数指定格式的宽度。令人惊讶的是,这种行为是不可预测的。有时似乎使用默认宽度,而有时却非常严重。难道这不能总是失败或总是使用某些默认行为吗?

我在工作中的一些代码中遇到了类似的用法,并花了很多时间弄清楚发生了什么。它似乎仅在调试版本中发生,而在使用gdb进行调试时则不会发生。另一个好奇之处是,通过valgrind运行它会始终导致打印很多“ 0”的情况,否则这种情况很少发生,但是也不会发生内存使用问题。

我正在运行Red Hat Enterprise Linux 7,并使用gcc 4.8.5进行了编译。

c c++ printf memory-leaks

3
推荐指数
1
解决办法
111
查看次数

有没有printf的替代品?

printf如果您可以访问#include <stdio.h>。printf由于格式说明符,我喜欢使用它,而且感觉比做的更好std::cout << "something\n";。

#include <stdio.h>
#include <cstdlib> // to use rand()

int main() {
    int randNum = rand()%10 + 1;
    printf("Hey, we got %d!\n", randNum);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

与

#include <iostream>
#include <cstdlib> // to use rand()
using std::cout;

int main() {
    int randNum = rand()%10 + 1;
    cout << "Hey, we got " << randNum << "!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我所在的不和谐服务器上的用户说这是不正确的做法,因为“ printf不安全,请使用std :: cout”。

第二个用户说这很不好,因为它不是类型安全的(第一个用户确实提到了类型安全,但没有提到深度)。

第二位用户说,

类型安全性由编译器强制执行。但是,通过使用可变参数函数,编译器无法在运行时确定参数的类型;它无法提前知道他们。该函数需要某种方式来说明期望的参数类型,而printfC函数家族则通过格式字符串说明符完成了此操作。

所以我正在寻找其他选择。

如果没有,我想我会坚持 …

c++ printf

3
推荐指数
1
解决办法
503
查看次数

参数序列不完整时带$表示法的Printf行为

我正在开发自己的标准C库函数printf的实现。我目前正在尝试在符号指定参数数字($)时添加(非标准)行为。

在这种情况下,如果您提供5个参数,并且在格式字符串中仅引用了参数1、2 3和5,因为这些参数存储在使用va_start获取的列表中,那么我就有问题了。要进入参数5,我将不得不跳过参数4。这意味着我必须在参数4上调用va_arg。这意味着我必须为参数4指定类型,而我对此一无所知。

我的问题是:在这种情况下,printf使用哪种数据类型?或者,如果未知,您将使用哪种类型?我尝试了void,但是va_arg不接受它作为数据类型(这种方式有意义)。我知道所有这些都是未定义的行为,但是我正在尝试弄清楚printf如何处理它,因此欢迎任何想法!

c printf

3
推荐指数
1
解决办法
59
查看次数

Why "\r " deletes my previous printed line but "\r" it doesn't

When I print some line, if I want to overwrite for example the first character, I use \r because is the carriage return character but it prints only one character after this one, my whole line is overwritten.

This is some code that I made for this question.

#include <stdio.h>

int main(){

    printf("-------");
    printf("\r ");
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

using this code my output is: with one space.

Now I change a little bit the code. The only change is that …

c printf carriage-return

3
推荐指数
1
解决办法
69
查看次数

为什么printf创建Windows行尾?

因此,我试图复制(和以后修改).ppm文件。我在使用mingw g ++的Windows 10上。原始文件仅是LF,但使用我的程序创建的文件具有CRLF,该文件会破坏.ppm文件。我在任何地方都没有做,但仍然可以输出。

FILE *fp;
FILE *dest;

char magicNumber[3];
int width, height, depth;
unsigned char red, green, blue;
unsigned char* buff;

printf("Hello, World!\n");


fp = fopen("lenna.ppm", "r+");

fscanf(fp, "%s", magicNumber);
fscanf(fp, "%d %d %d", &width, &height, &depth);
printf("%s %d %d %d nums\n", magicNumber, width, height, depth);


dest = fopen("lena2.ppm", "w+");
fprintf(dest, "%s\n%d %d\n%d", magicNumber, width, height, depth);
Run Code Online (Sandbox Code Playgroud)

结果是

在此处输入图片说明

为什么?

我只想有LF。我怎么做?

c printf mingw

3
推荐指数
1
解决办法
58
查看次数

字符串格式(C%* s)

我在C的某处看到了一部分代码

char name[51];
int group = 0;
scanf("%*s %50s %*s %d", name, &group);
printf("%s / %d\n", name, group);
Run Code Online (Sandbox Code Playgroud)

如果我们介绍

“名称:史密斯集团:7”

它等待着我们引入另一个价值。真奇怪。到底发生了什么,%*s %50s %*s意味着什么。我%*s以前看过,但从未看过字符串。

c string printf input conversion-specifier

3
推荐指数
1
解决办法
41
查看次数

如何使用C ++ 20 std :: format?

C ++ 20引入std::format。与printf或相比有什么优势std::cout?我如何使用它,有人给它举例?

c++ printf cout string-formatting c++20

3
推荐指数
2
解决办法
123
查看次数