论坛: 编程破解 标题: C编译器为何输出如下的结果??? 复制本贴地址    
作者: None [jacky8714]    论坛用户   登录
#include <stdio.h>
#define format "%s is a string\n"

int main(void)
{
    printf(format,format);
    return 0;
}
结果为:
%s is a string
  is a string
为什么这样输出????

书上说printf(format,format)'这种格式和printf("%s is a string\n","%s is a string\n");
是一样的

那为什么我将程序改成printf("%d is a what?\n","%d is a what?\n");
之后,结果却是:
404 is a what?

请问这是什么原因?谢谢各位。

另外附一个问题
#include <stdio.h>
int main(void)
{
    char ch = 's';
    while (ch < 'w'){      //编译器在此处报错
        printf("%c",ch);
        ch++;
    }
    return 0;
}
书上的一个习题,他请问我将输出什么结果?
可编译器在那里报错,我想知道C不是有自动转换数据类型的能力,为什么不能进行比较?
谢谢
   



[此贴被 None(jacky8714) 在 07月08日20时34分 编辑过]

地主 发表时间: 04-07-08 20:32

回复: renyechao [renyechao]   论坛用户   登录
printf(format,format);翻译过来就是
printf("%s is a string",%s is a string)
其中引号中的 %s就代表 %s is a string这个字符窜
输出完这个字符串后再输出 is a string
就是以上的结果了

B1层 发表时间: 04-07-08 21:44

回复: sniper167 [sniper167]   论坛用户   登录
#include <stdio.h>
#define format "%s is a string\n"

int main(void)
{
    printf(format,format);
    return 0;
}
结果为:
%s is a string
  is a string
----------------------------------------
我觉得结果应该是
"%s is a string\n"is a string
郁闷喃
想不通为什么会输出
%s is a string
  is a string
哪位解释一下喃





[此贴被 啥都不会(sniper167) 在 07月08日23时53分 编辑过]

B2层 发表时间: 04-07-08 23:25

回复: sniper167 [sniper167]   论坛用户   登录
#include <stdio.h>
int main(void)
{
    char ch = 's';
    while (ch < 'w')
  {
        printf("%c",ch);
        ch++;
    }
    return 0;
}

我的XP+TC2.0运行正常
输出stuv

B3层 发表时间: 04-07-08 23:39

回复: jhkdiy [jhkdiy]   版主   登录
printf(format,format);
   
我的想法是这样的:
    估计编译器将这条语句等价于下列语句:
    printf("%s is a string\n","%s is a string\n");
   
第一个"%s is a string\n"中的%s是需要实参的,它直接将第二个"%s is a string\n"作为第一个"%s is a string\n"的%s参数的实参;于是第一次输出:

%s is a string 
  is a string

跟着遇到第二个"%s is a string",%s还是需要一个参数,但找不到,所以什么也不输出。






 
 










[此贴被 jhkdiy(jhkdiy) 在 07月09日00时34分 编辑过]


[此贴被 jhkdiy(jhkdiy) 在 07月09日00时39分 编辑过]

B4层 发表时间: 04-07-09 00:33

回复: jhkdiy [jhkdiy]   版主   登录
对于printf("%d is a what?\nprintf("%d is a what?\n","%d is a what?\n");

其中%d需要一个数字参数,而其后却是一个字符串,我估计编译器是将"%d is a what?\n"的地址来作为%d的参数。

B5层 发表时间: 04-07-09 00:43

回复: None [jacky8714]   论坛用户   登录
哦,对~~


但是参数不应该加“”呀

比如
printf("%d is something",x);
这里的X的没有引号呀,加引号效果是一样的?

我试试。

还有如果那个程序没错,应该输出stuvw才对啥!

B6层 发表时间: 04-07-09 13:07

回复: None [jacky8714]   论坛用户   登录
哦,懂了,谢谢。

B7层 发表时间: 04-07-09 13:08

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号