刚开始接触C语言,写了这段代码来倒装单词,但是我发现了一个小东西,不知道是BUG还是语言的未来。
这段代码的目的是这样的。
简单的输入 欢迎
简单输出:emoclew
代码工作正常,但当我们定义了变量 patrol
在变量前 size
程序无法运行。另外,如果你定义了一个变量 counter
在变量之后 size
和变量 patrol
在变量前 size
程序就能正常运行。
问题是:为什么会出现这种情况?
#include <stdio.h>
int main(void)
{
char name[ 100 ];
int counter;
int size;
int patrol = 0;
for (counter = 0; counter < size; counter++, patrol++)
{
name[ counter ] = getchar();
size = sizeof(name);
if (10 == name[ counter ])
{
break;
}
}
for(counter = patrol; counter >= 0; counter--)
{
printf("%c", name[ counter ]);
}
printf("\n");
return 0;
}// end of main
这个循环
for (counter = 0; counter < size; counter++, patrol++)
调用未定义的行为,因为变量 size
在循环之前没有初始化
int size;
本声明
size = sizeof(name);
并不是很合理,因为 sizeof(name)
总是产生 100
即声明数组的大小 name
char name[ 100 ];
在这个if语句中
if (10 == name[ counter ])
宜用 '\n'
而不是魔数 10
.
还有这句话
name[ counter ] = getchar();
在数组中存储新的行字符 name
.
程序的样子可以是这样的。
#include <stdio.h>
int main(void)
{
enum { N = 100 };
char name[ N ];
int c;
int i = 0;
while ( i < N && ( c = getchar() ) != EOF && c != '\n' )
{
name[i++] = c;
}
while ( i != 0 )
{
putchar( name[--i] );
}
putchar( '\n' );
return 0;
}
如果要进入
Hello Eryano
那么程序输出将是
onayrE olleH
我建议使用以下代码。考虑看看吧:-
#include<stdio.h>
int main() {
int counter,size=0;
char name[100];
printf("\nEnter a text : ");
while(1) { // Iterates until 'Enter' is pressed.
name[size++] = getchar();
if(name[size-1]=='\n') break;
}
name[--size]='\0'; // Null character added to complete string...
printf("\nReverse text : ");
for(counter=size-1;counter>=0;counter--) {
printf("%c",name[counter]);
}
}