我尝试使用一个变量来设置printf()格式说明符中的动态字段宽度。我搜索了网站,发现以下似乎只是我需要的帮助。
Set variable text column width in printf
当我使用“%*1$d%*2$s”时,我得到以下错误。
ex8_3.c:29:11: warning: missing $ operand number in format [-Wformat=]
29 | printf("The value entered, in characters, was \"%*1$d%*2$s\".\n", fieldWidth, string);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
字符串
但是,当我使用“%1$*d%2$*s”时,我得到以下错误。
ex8_3.c: In function ‘main’:
ex8_3.c:29:4: warning: missing $ operand number in format [-Wformat=]
29 | printf("The value entered, in characters, was \"%1$*d%2$*s\".\n", fieldWidth, string);
| ^~~~~~
型
请注意两个语句中星号的不同位置。根据编译器的说法,第二个版本似乎是“更正确”的一个。在这两种情况下,我不明白的是错误消息中提到的“缺少$ operand数”。printf()使用两个变量,我提供了两个“$ operand number”的示例。鉴于上面链接的网页中的例子,我只是不明白我做错了什么/不理解。有人能解释一下错误消息指的是什么,我需要实施什么更正吗?
下面是有问题的代码。
int main(void)
{
int number = 0; // Value supplied by user.
int arraySize; // Size of the digit array.
int fieldWidth = 0; // Allow variable field width in printf().
number = readValue(); // Read in value from user.
arraySize = countDigits(number) + 2; // Get array size.
fieldWidth = arraySize + 2; // Set variable field width for printf().
char string[arraySize]; // Define array to hold digit characters.
itoa(number, string); // Convert value to string.
printf("The value entered, in characters, was \"%1$*d%2$*s\".\n", fieldWidth, string);
return 0;
}
型
下面是正在使用的命令行。
gcc ex8_3.c -Wall -std=c11 -ggdb -o ex8_3
型
1条答案
按热度按时间rryofs0p1#
看起来您试图使用
%n$
(要打印的字段)和*m$
(宽度)来使用POSIX位置参数。这里的width修饰符需要在 * number之后提供,以选择要打印的参数:字符串
%2$
-要打印的参数,string
*1$
-保存宽度的参数fieldWidth
s
-字段是字符串你会得到同样的输出,但要简单得多:
型