|
查看: 1093|回复: 10
|
c++的疑问(请看楼10)
[复制链接]
|
|
|
大家好。小弟初来报道,刚学习c++,
做练习时遇到些问题,希望大家能多多指教。
1。 请问如果我要integer display randomly from 1到100,
rand() 跟 srand()要怎样搭配呢?
我试了
srand(unsigned int (1));
RAND_MAX ==1000;
k = rand();
cout<<k;
不可以。
2. 然后我有一个function,
char again (char b)
{
switch (b)
{
case 'y':
rerun(y);
break;
case 'n':
break;
default:
cout<<"wrong answer. only y and n allow"
<<"\n"<<"-please enter again"<<endl;
cin>>b;
again(b);
break;
}
return 0;
}
问题: 为什么可以return 0的, 不是应该return char吗?0不是integer吗? 可是如果我不放return 0, program又出error. 不明白。
3.
int x = 0;
int main()
{
cout<<" I have a number between 1 and 1000 "
<<"\n"<<"Can you guess my number?"
<<"\n"<< "-Please type your first guess"<<endl;
cin>> x; <----这个input我要怎样限制只是integer input 呢? 因为当我run program时, 我试打英文字母,它一直出Too Low. Try again
srand( unsigned int (1));//unsigned)time( NULL ) );
// RAND_MAX ==1000;
k = rand();
cout<<k;
while (x!=k)
{
if (x<k)
{ cout<<"Too Low. Try again"<<endl;
cin>>x;
}
if (x>k)
{ cout<<"Too High. Try again"<<endl;
cin>>"x";
}
}
先谢谢大家了。
[ 本帖最后由 lliioonn 于 27-10-2008 04:46 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 7-10-2008 02:03 AM
|
显示全部楼层
1
RAND_MAX 是不能改的
你要用簡單的algorithm來弄rand()的range
參考 http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html
srand()
一般的情況之下
每1次執行程式rand()製造出來的號碼是一樣的
所以就需要srand()配合time()來製造不一樣的號碼
參考http://www.cplusplus.com/reference/clibrary/cstdlib/srand.html
2
每一個char都有代表性的號碼
就是所謂的acsii value
如 101 等於 e ...等等
char a = 101;
printf("%c", a);
所以 return 0; 是沒問題的
如果你想要沒有return的function
function type放void就好了
3
可以用isdigit()或isalpha()之類的function來檢查吧... |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 8-10-2008 10:05 AM
|
显示全部楼层
问题解决了。很谢谢你的帮忙。
最近研究那个for, loop来Loop去,loop到头都晕了
[ 本帖最后由 lliioonn 于 8-10-2008 10:57 AM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 12-10-2008 10:17 PM
|
显示全部楼层
又遇到新问题了,不大肯定。
练习叫我写个nonrecursice function, fibonacci (n)
0,1,1,2,3,5,8,...
以下的算是吗?
#include
int i, n;
int total[100];
int total1=1;
int sum=0;
int fibonacci (int a)
{
// if (a==0||a==1)
// return a;
for (i=0; i<=a; i++)
{
//total[-1]=0;
total[0]=0;
total[1]=1;
total[2]=1;
total[i+2]=total+total[i+1];
cout<<"\n"<<
//if (total>2147483647)
//cout<<"biggest"<<
}
return total[a];
}
int main()
{
cout<<"Enter nth"<
cin>>n;
total[n] = fibonacci(n);
return 0;
}
然后它说determine the largest Fibonacci number that can be printed on your system. 这个怎样要怎样搞? |
|
|
|
|
|
|
|
|
|
|
发表于 12-10-2008 11:36 PM
|
显示全部楼层
最后一个number刚刚大过 ULONG_MAX 。
对了要加入 <climits> |
|
|
|
|
|
|
|
|
|
|
发表于 13-10-2008 11:12 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 13-10-2008 08:58 PM
|
显示全部楼层
原帖由 onlylonly 于 12-10-2008 11:36 PM 发表 
最后一个number刚刚大过 ULONG_MAX 。
对了要加入
又学到新东西了。谢谢。 因为我用INT, 所以我用INT_MAX。
其实我不懂我理解问题错误没有.
我随便KEY IN一个很大的号码,
然后看OUTPUT出来有NEGATIVE,应该是OVERFLOW
所以我觉得它应该是要我找出BIGGEST VALUE before result exceed int_max.
所以我的CODE也改了
for (i=0; i<=a; i++)
{
answer = previous+sum;
previous = sum;
sum = answer;
cout<<"\n"<<
if (answer<0)
{
cout<<"Overflow!"<
cout<<"biggest value before overflow is "<<
i=i+a;
}
}
哈~ 谢谢。
你那个好过我用array...(好像帖4我写的那样)
因为我还要自己设定一个range给array,对吗?
[ 本帖最后由 lliioonn 于 13-10-2008 09:19 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 13-10-2008 10:10 PM
|
显示全部楼层
回复 7# lliioonn 的帖子
不可以大过int_max,
ULONG_MAX 是 unsigned long int, 也就是没有 -ve , 基本上在int里面是有最大的容量, 会比int大。
[ 本帖最后由 onlylonly 于 13-10-2008 10:11 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 13-10-2008 10:19 PM
|
显示全部楼层
原帖由 onlylonly 于 13-10-2008 10:10 PM 发表 
不可以大过int_max,
ULONG_MAX 是 unsigned long int, 也就是没有 -ve , 基本上在int里面是有最大的容量, 会比int大。
可是如果大过int_max,出来的sum就会去-ve
那么sum不是永远都不会大过int_max?
 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 27-10-2008 04:46 PM
|
显示全部楼层
请问要怎样把DECIMAL换去8 bit BINARY?
例如,DEC15换去00001111, 而不是1111而已。
DEC 16 -> 00010000.
在MFC, 我只能用itoa这FUNCTION,做不到这个效果.
问题解决了
[ 本帖最后由 lliioonn 于 28-10-2008 03:56 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 18-11-2008 11:49 PM
|
显示全部楼层
回复 10# lliioonn 的帖子
如果有用MFC, 弄成4位数大概是酱吧
CString.Format(“%#.4d", val); |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|