我对printf说明符有点麻烦...所以在问你们之前我几乎读了C++Reference page上的所有内容,但无法解决问题,因为我是新手,甚至无法理解这个问题,它很可能是语法错误,但我无法找到它......
for(i = 1; i <= 10; i++) {
printf("\n%d.%s%n",i,names[i-1],offset);
printf("%*s%.2f TL",10-offset," ",prices[i-1]);
}
所以基本上我有这个代码来打印一个列表,我希望价格从同一列开始。 例如:
我的代码背后的逻辑(包括它不明显,我无法判断它是否是):
一旦我无法获得我想要的结果,我检查并发现所有名称的偏移量为3,而不是这种情况(并且在此过程之前没有赋值给偏移量。)
感谢您提供任何帮助!
PS:这是一个练习代码,只是为了更好地有效地使用说明符。
编辑: 所以我这样做了:
for(i=1;i<=10;i++)
{
printf("%d.%s%n",i,names[i-1],&offset);
printf("%*s%.2f TL\n",10-offset," ",prices[i-1]);
}
但是我得到的结果是巨大的空黑色命令屏幕。
答案 0 :(得分:1)
%n格式说明符需要指针。您的代码缺少&amp;偏移的运算符:
printf("\n%d.%s%n",i,names[i-1],&offset);
好的&#39; C接口不知道你为printf提供了什么类型,所以它不会抱怨并愉快地读取堆栈上的4字节整数值作为内存位置 - &gt;核心转储。
实际上,带有-Wall 的g ++会发出警告。所以
答案 1 :(得分:0)
以%n
格式使用printf
时,相应的参数必须是指针。 printf
会将信息存储在您指向的int
中。
假设您已在某处宣布int offset
,则应使用&offset
作为printf
来电中的最后一个参数。
虽然我们在这里,请允许我对此摘录发表评论:
printf("\n
ARGH NO!换行符是终结符。它出现在一条线的末端,而不是开头。
答案 2 :(得分:0)
所以我这样做了:
for(i=1;i<=10;i++)
{
printf("%d.%s%n",i,names[i-1],&offset);
printf("%*s%.2f TL\n",10-offset," ",prices[i-1]);
}
但是我得到的结果是巨大的空黑色命令屏幕。
编辑:你们可以尝试这个并告诉我你是否得到了正常的结果?我无法理解发生的错误,所以我无法超越它......也许其他一些例子会让我知道错误在哪里。