看了一个猜数字游戏的介绍,打算自己写一个。以下贴上并不满意的代码。目前希望解决的问题是想用malloc来设动态数组,从而实现,如果非法输入大于4位的字符,它也报错。
2014-Aug-05: 给它增加了一个answer设随机数的功能。大于4位也可以检测了。但是一个unfriendly的地方是是输入四位后还要多按一次回车。
2014-Aug-24: 今天做其他代码,需要用到这里面的function,结果随机那离掉出来发现是错的。惭愧。于是重新修改和改善了两点。1. 随机做得更随机了。2.随机生成答案部分有逻辑错误,已修改完毕。
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int legalinput (char array[],char k); //Try to check up whether the input consists of 4 different numbers.
int checkup (char array[], char answer[]); // Check up answer.
int main(){
int m, times,a;
char k;
char arr[4];
char pool[10] = {'0','1','2','3','4','5','6','7','8','9'};
int chose[4];
char answer[4];
int i,p,q;
time_t t;
srand((unsigned) time(&t));
for (i = 0; i < 4; i++){ //Start to generate the random answer;
chose[i] = rand()%10;
for (p=i-1; p>=0;p--) {
if (p == -1)
continue;
if(chose[p] == chose[i]) {
chose[i]=rand()%10;
p = i ;
}
}
}
for(q=0;q<4;q++){
answer[q] = pool[(chose[q])];
} //Finish Generating the answer array;
for(i = 0; i < 4; i ++)
printf("%c ",answer[i]); /*ATTENTION: PUT ANSWER HERE; YOU CAN EARASE IT WHEN YOU'R PLAYING;*/
a = 0;
times = 0;
while ( a != 4 ){
printf("Please input FOUR different numbers: \n");
for (m=0; m < 4; m++){
scanf("%c",&arr[m]);
}
scanf("%c", &k); //Capture the fifth;
while (getchar() != '\n'){
continue;
}
while (legalinput (arr,k) != 0) {
printf("Illegal input. Sorry, again please...\n");
for (m=0; m < 4; m++){
scanf("%c",&arr[m]);
}
scanf("%c", &k);
while (getchar() != '\n'){
continue;
}
}
times++;
a = checkup (arr,answer);
printf("%d time(s) now.\n",times);
}
printf("Finally...");
printf(" Totally, %d time(s)\n", times);
return 0;
}
int legalinput (char array[], char k){
int z,y,flag;
flag = 0;
for (z = 0; (array[z] <= '9') && (array[z] >= '0') && z < 4; z++) {
for (y=z+1; y<4; y++) {
if (array[z] == array[y])
flag = 1;
}
}
if (z != 4)
flag = 1;
if (k != '\n')
flag = 1;
return flag;
}
int checkup(char array[], char answer[]){
int i, n;
int a = 0;
int b = 0;
for (i = 0; i < 4; i++) {
if (array[i] == answer[i])
a++;
for (n=0; n < 4; n++) {
if ( (n != i) && (array[i] == answer[n])) {
b++;
}
}
}
while (i > 0){
if (array[n] == answer[i])
b++;
i--;
}
printf("%dA%dB\n", a,b);
return a;
}
刚看了看别人做的,别人的思路是用整型数组,然后巧用pow10(i)。不过记得加个函数库 <math.h>。这倒是节省了申请内存做动态数组的烦恼。