将数组的单元格打印为右对齐表格的最佳方法是什么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,但它似乎不允许非常数的字段宽度。最佳答案将使用一些标准方法来填充表格单元格,而不是手动插入空格字符。
#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编程,对以下代码有疑问。
#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) 以下简单程序的行为异常。有时它打印“ 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进行了编译。
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的实现。我目前正在尝试在符号指定参数数字($)时添加(非标准)行为。
在这种情况下,如果您提供5个参数,并且在格式字符串中仅引用了参数1、2 3和5,因为这些参数存储在使用va_start获取的列表中,那么我就有问题了。要进入参数5,我将不得不跳过参数4。这意味着我必须在参数4上调用va_arg。这意味着我必须为参数4指定类型,而我对此一无所知。
我的问题是:在这种情况下,printf使用哪种数据类型?或者,如果未知,您将使用哪种类型?我尝试了void,但是va_arg不接受它作为数据类型(这种方式有意义)。我知道所有这些都是未定义的行为,但是我正在尝试弄清楚printf如何处理它,因此欢迎任何想法!
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 …
因此,我试图复制(和以后修改).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的某处看到了一部分代码
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 ++ 20引入std::format。与printf或相比有什么优势std::cout?我如何使用它,有人给它举例?