| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖
标题:新来,请教一个问题先,困惑了一个晚上!
只看楼主 加入收藏
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
 问题点数:0 回复次数:7 
新来,请教一个问题先,困惑了一个晚上!

#include<stdlib.h>
#include<stdio.h>
#define N 20
char *randStr()
{
int i;
char str[20];

for(i=0;i<20;i++)
{
str[i]=random(2)?random(26)+65:random(26)+97;
printf("%c",str[i]);
}

return str;
}

void main()
{ int i;
char *ps;

char s[20];
clrscr();
ps=randStr();
printf("************\n");
for(i=0;i<N;i++){
printf("%5c",*ps);
s[i]=*ps;
ps++;}
for(i=0;i<N;i++)
{
printf("%5d",s[i]);
}

}
我想随机输出二十个数。结果是:
aytTeyZitJHxbzEVLyZY************
a y t T « é ♂ ╢ ¿ ☺ & ☻ σ ♀
╬ t ☻ 97 121 116 84 -82 -1 -126 11 -74 -1 -88 1
38 2 -27 12 -50 -1 116 2

为什么会这样?谁能教教我!

搜索更多相关主题的帖子: 困惑 困惑 
2007-04-07 09:38
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
得分:0 

我是想调用函数randStr()返回一个字符指针给ps.
再用ps 打印出randStr()里的字符数组str[20];
结果只有前四位相同,后面的就不一致了。
用printf("%5d",s[i]);我是为了在屏幕上好看点才这样的。
按理来说randStr()、ps、s[20]的输出结果应该一致啊。

而且randStr()里用随机函数产生的值,每次编译、运行应该要是不同的结果才对啊。
但我每次重新编译、运行结果是不变的!


没有解决不了的问题,时间而已!
2007-04-07 11:31
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 

程序代码:

#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<string.h>
#define N 20
char * randStr()
{
int i;
char str[20];
srand( (unsigned) time ( NULL) );//random seed

for(i=0;i<19;i++)//size is 20
{
str[i]=rand()%2?rand()%26+65:rand()%26+97;
printf(\"%c\",str[i]); //it is different every time

}
str[i]='\0';//end

return str;
}

void main()
{
int i;
char *ps=\"\";//initial

char s[20];
strcmp(ps,randStr());//invoke the string assigning function
printf(\"\n************\n\");
for(i=0;i<N;i++)
{
printf(\"%5c\",*ps);
s[i]=*ps;
ps++;
}
for(i=0;i<N;i++)
{
printf(\"%5c\",s[i]);
}

}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-07 12:30
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
得分:0 

按楼上的做,主函数之前的部分是正确了。
不过下面的问题并没有解决。
从理论上讲,我看不出什么问题。
不过我把该函数里的问题部分抽取出来再写了个测试函数。结果很奇怪。
函数如下:
#include<stdio.h>
#include<stdlib.h>
char *wu()
{
char s[4];
s[0]='e';
s[1]='e';
s[2]='e';
s[3]='\0';
return s;
}
main()
{
char *p=" ";

clrscr();
printf("%c\n",wu()[2]);
printf("%c",wu()[1]);
strcpy(p,wu());
printf("%s",p);
}
输出结果是:
e
e☺
并不是想要的结果。为什么会这样?
别纠正下楼上笔误的错误:
change strcmp to strcpy.
function strcpy(str1,str2) require the lengths of str1 is bigger than str2.
继续求教!!!!!


没有解决不了的问题,时间而已!
2007-04-07 15:15
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
得分:0 
函数wu()返回的是s[4]的首地址。
按理来说把它赋值给一个字符指针p。
用p对数组应该可以操作啊。但输出结果却大失所望。。
点解?

没有解决不了的问题,时间而已!
2007-04-07 15:24
tvkl
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-4-7
收藏
得分:0 

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define N 20
char *randStr()
{
int i;
char str[20],*p=" ";
randomize();
for(i=0;i<19;i++)
{
str[i]=random(2)?random(26)+65:random(26)+97;
printf("%c",str[i]);
}
str[19]='\0';

strcpy(p,str);
return p;
}
void main()
{
int i;
char *ps;
clrscr();
ps=randStr();
printf("\n*************\n");
printf("%s",ps);
}
终于成功了,结果如下。
ESkCpNJkItyyQcDaVlM
*************
只是对堆内存,栈内存之类的不懂。
什么是引用类型,基本类型。
继续爬。
ESkCpNJkItyyQcDaVlM


没有解决不了的问题,时间而已!
2007-04-07 19:18
快速回复:新来,请教一个问题先,困惑了一个晚上!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042757 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved