格式说明符语法错误?

时间:2014-03-12 23:38:58

标签: printf format-specifiers

我对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]);
}

所以基本上我有这个代码来打印一个列表,我希望价格从同一列开始。 例如:

  1. 水1.00
  2. oj 1.00
  3. 我的代码背后的逻辑(包括它不明显,我无法判断它是否是):

    • 打印身份证号码和姓名,计算我们目前已编写的字符数,并将其分配给抵消。
    • 打印(价格表的起始栏) - 价格前的偏差空格

    一旦我无法获得我想要的结果,我检查并发现所有名称的偏移量为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]);
    

    }

    但是我得到的结果是巨大的空黑色命令屏幕。

3 个答案:

答案 0 :(得分:1)

%n格式说明符需要指针。您的代码缺少&amp;偏移的运算符:

printf("\n%d.%s%n",i,names[i-1],&offset);

好的&#39; C接口不知道你为printf提供了什么类型,所以它不会抱怨并愉快地读取堆栈上的4字节整数值作为内存位置 - &gt;核心转储。

实际上,带有-Wall 的g ++会发出警告。所以

  • hd1在这里有一点意义,因为C ++输出类型安全(即使它很痛苦);
  • 留意你的警告。

答案 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]);

}

但是我得到的结果是巨大的空黑色命令屏幕。

编辑:你们可以尝试这个并告诉我你是否得到了正常的结果?我无法理解发生的错误,所以我无法超越它......也许其他一些例子会让我知道错误在哪里。