C语言的一个关于条件编译问题

#include <stdio.h>
void main()
{
char s[40];
int n,i;
printf("输入字母串:\n");
gets(s);
printf("选择:0,小写输出 1,大写输出:\n");
scanf("%d",&n);
#if (n==1)
{for(i=0;s[i]!='\0';i++)
if (s[i]>96&&s[i]<123)
s[i]-=32;}
#else
{for(i=0;s[i]!='\0';i++)
if (s[i]>64&&s[i]<91)
s[i]+=32;}
#endif
puts(s);

我想先输入字附串,再输入n选择输出的字符串是大写还是小写,但是上面的程序无论输入n是1或0都输出的是小写,请问错在哪里?

如果我改写成if条件语句(如下)则可以,为什么呢?

#include <stdio.h>
void main()
{
char s[40];
int n,i;
printf("输入字母串:\n");
gets(s);
printf("选择:0,小写输出 1,大写输出:\n");
scanf("%d",&n);
if (n==1)
{for(i=0;s[i]!='\0';i++)
if (s[i]>96&&s[i]<123)
s[i]-=32;}
else
{for(i=0;s[i]!='\0';i++)
if (s[i]>64&&s[i]<91)
s[i]+=32;}
puts(s);
}

感谢!

上面的那个程序是把N当做一个预定义的参数,而你并没有定义n,所以只会进入下面的分支。
下面的程序n是一个变量,是从外部输入,当然可以根据输入变化。

第一个可以改成,
#define n 0 // 小写
#define n 1 // 大写
这样来选择大小写
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-03
预编译的时候,你并没有输入数据,n的值不固定,它等于1的几率很小,所以编译的是n!=1时的语句。
相当于的效果是
#include <stdio.h>
void main()
{
char s[40];
int n,i;
printf("输入字母串:\n");
gets(s);
printf("选择:0,小写输出 1,大写输出:\n");
scanf("%d",&n);

for(i=0;s[i]!='\0';i++)
if (s[i]>96&&s[i]<123)
s[i]-=32;

puts(s);

也即,预编译是如果满足某条件即编译某语句。。所以在运行期输入的数据,不影响编译的程序。

我说的比较乱,大概就是这个意思。
第2个回答  2009-12-03
条件编译不是这样用的 它是得先用define定义 后才能用
#if (n==1)
{for(i=0;s[i]!='\0';i++)
if (s[i]>96&&s[i]<123)
s[i]-=32;}
#else
{for(i=0;s[i]!='\0';i++)
if (s[i]>64&&s[i]<91)
s[i]+=32;}
#endif
你的这个完全没起作用 要改的话 加一个define吧