首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪里出有关问题了

2013-01-05 
哪里出问题了?#include stdio.h#include string.hint main(int argc, char* argv[]){char a[18]int i

哪里出问题了?
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{char a[18];int i,k;
for(i=0;(a[i]=getchar())=='\n';i++)
{putchar(a[i]);}
k=strlen(a);
printf("字符串长度为:%d\n",k);
return 0;
}
输出总是为23。
[解决办法]


#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char a[18];int i,k;
for(i=0; ;i++)
{
a[i]=getchar();
if(a[i]=='\n')
break;
putchar(a[i]);
}
k=strlen(a);//问题在这里,因为没有字符串末尾没有置0

printf("字符串长度为:%d\n",i);
return 0;
}

[解决办法]
改成我那样就可以了。
[解决办法]
1.按照你的逻辑 循环条件这里应该这样判断a[i]=getchar())!='\n'

2.strlen()会读取到'\0'结束,所以应该a[i]='\0';
[解决办法]


#include <stdio.h>
#include <string.h>
int main()
{
char a[18];int i,k;
for(i=0;;i++)
{
a[i] = getchar();
if(a[i] == '\n')
break;
putchar(a[i]);
}

a[i] = '\0';
k=strlen(a);
printf("字符串长度为:%d\n",k);
return 0;

}


字符串尾设置'\0'
[解决办法]

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
char a[18];
int i,k;
for(i=0; (a[i]=getchar()) != '\n' && i < 17; i++)
{
putchar(a[i]);
}
    a[i] = '\0';

k = (int)strlen(a);
printf("\n字符串长度为:%d\n", k);

return 0;
}

[解决办法]
getchar()!='\n',不是 getchar()=='\n';
strlen求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。
所以你应该在有个a[i]='\0'.

热点排行