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

#include<stdio.h>
#define LETTER T
void main()
{
char c;
char str[15];
printf("input string:\n");
scanf("%s",str);
scanf("%d", &T)
while((c=str[i] )!= '\0')
{
#if LETTER
if((c >= 'A' && c < 'Z') || (c >= 'a' && c <= 'z'))
c = c+1;
else if(c == 'Z') c = 'A';
else if(c == 'z') c = 'a';
else;
#else
c = c;
#endif
printf("%c", c);
}
printf("\n");
}

我想通过输入T的值来决定程序的行为,但是提示说T 没有声明
T虽然没有声明,但是在#define LETTER T中提到了啊,如果我再声明的话就不是我的原意了

看来你对条件编译的理解有点问题,条件编译,顾名思义,是值在编译的时候根据一定的条件来选择编译某一段或某几段程序的。

而你要实现的功能似乎是想让程序根据你的输入来做不同的事情。这个时候程序已经编译好了,跟条件编译没有任何关系。

要实现你的要求,可以这么做:

...

char T;
scanf("%c", &T);

...

while((c=str[i] )!= '\0')
{
if(T=='T')
{
...
}
else
{
...
}
}

或者:

#define LETTER T

...

while(...)
{
#if LETTER==T
...程序段1
#else
...程序段2
}

这样,当你#define LETTER T 的时候,就只有程序段1被编译了。

当你#define LETTER M或这其他的字符时,就只有程序段2被编译了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-25
scanf("%d", &T) 这里T的确没有声明啊!
第2个回答  2019-12-24
或者你是在windows下面写代码,最终是在Linux系统上跑~
win和linux很多底层API都不一样~为了调试方便~
第3个回答  2019-10-23
不是