为什么这一段代码编译运行后出现乱码

ad456aaa 2012-06-14 10:00:21

#include <stdio.h>
#include <ctype.h>
void input (char *p,int n);

int main (void)
{
char a[81];
int n;
puts ("Input the char number of your string:");
scanf ("%d",&n);
getchar ();
puts ("input your string:");
input (a,n);
puts (a);

return 0;
}

void input (char *p,int n)
{
int i;
for (i = 0;i < n;i++)
{
*(p + i) = getchar ();
if (isspace(*(p + i)))
break;
}
}


编译运行后输入字符出现这样的乱码
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-06-14
  • 打赏
  • 举报
回复
2、3楼的思路是正确的。

或者在char a[81];后面增加一句:
memset(a, 0, 81);
其它不用改动。
fzamygsd 2012-06-14
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <ctype.h>
void input (char *p,int n);

int main (void)
{
char a[81];
int n;
puts ("Input the char number of your string:");
scanf ("%d",&n);
getchar ();
puts ("input your string:");
input (a,n);
puts (a);

return 0;
}

void input (char *p,int n)
{
int i;
for (i = 0;i < n;i++)
{
*(p + i) = getchar ();
if (isspace(*(p + i)))
break;
}
*(p+i)='\0';//加上这个试试
}


firendlys 2012-06-14
  • 打赏
  • 举报
回复
出现什么乱码,不清楚.

不过,貌似,你输入的字符串,没有添加结束符,也就是 '\0' 了,字符串也就不知道到哪里结束.
因此,原则上,在字符串最后肯定有乱码出现.

将 input() 的 break 改为

{
*(p + i) = 0 ;
break;
}

看看.
夏天__ 2012-06-14
  • 打赏
  • 举报
回复
可能是编译器支持字符的问题。

ad456aaa 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
2、3楼的思路是正确的。

或者在char a[81];后面增加一句:
memset(a, 0, 81);
其它不用改动。
[/Quote]

好的 我试下
酱油党 2012-06-14
  • 打赏
  • 举报
回复

char a[81] = {0};//

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧