本帖最后由 mxwawaawxm 于 2019-12-4 22:28 编辑
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
int generate_num(int *nums);
void input_num(char *num_input);
int check_input_num(char *num_input);
void print_input_num(int valid, char *num_input);
int main(int argc, char *argv[])
{
int nums[4] = {0};
char num_input[4];
int quit=0;
// 生成四个互不相同的数字,并存入数组
generate_num(nums);
printf("%d%d%d%d\n", nums[0], nums[1], nums[2], nums[3]);
do {
printf("%d%d%d%d\n", nums[0], nums[1], nums[2], nums[3]);
// 输入四个互不相同的数字
input_num(num_input);
} while (quit==0);
return 0;
}
/*生成四个互不相同的数字*/
int generate_num(int *nums)
{
srand(time(NULL));
int i=0,j;
int num;
while (i<4) {
num=rand()%10;
for (j=0;j<i;j++) {
if (num == nums[j]) {
break;
}
}
if (j!=i) {
continue;
}
nums[i]=num;
i++;
}
}
/*输入四个互不相同的数字*/
void input_num(char *num_input)
{
int valid;
do {
fprintf(stdout, "请输入四个互不相同的数字:");
scanf("%s", num_input);
// 判断输入数字字符是否有效
valid = check_input_num(num_input);
// 判断完输入数字字符是否有效,打印反馈信息
print_input_num(valid, num_input);
} while (valid!=0);
}
int check_input_num(char *num_input)
{
// 输入的字符长度不为4
if (strlen(num_input)!=4) {
return 1;
}
int i=0,j=0;
for (i=0;i<4;i++) {
// 输入的字符不是数字字符
if (!isdigit(num_input[i])) {
return 2;
}
for (j=0;j<i;j++) {
// 输入的字符存在相同的数字
if (num_input[i]==num_input[j]) {
return 3;
}
}
}
return 0;
}
void print_input_num(int valid, char *num_input)
{
switch (valid) {
case 1:
fprintf(stdout, "输入的字符%s长度不是4\n", num_input);
break;
case 2:
fprintf(stdout, "输入的字符%s包含非数字字符\n", num_input);
break;
case 3:
fprintf(stdout, "输入的字符%s包含相同的数字\n", num_input);
break;
default:
break;
}
}
上面的代码思路如此
[C] 纯文本查看 复制代码 int nums[4] = {0};
先声明一个整型数组,4个元素初始化为0;
再调用函数generate_num(nums)生成四个互不相同的数字,并存入数组nums
再声明一个字符数组char num_input[4];,用以保存用户输入的4个数字字符
接着调用input_num(num_input),让用户输入数字。并利用check_input_num(num_input)函数检查数字是否有效,利用print_input_num(valid, num_input)函数输出反馈信息
回到main函数里,有一个循环,每次,我特意输出一次数组nums的元素。发现循环一次,数组nums的元素会发生改变这是哪里出错。编译器也没报错
请大侠们赐教
[C] 纯文本查看 复制代码 do {
printf("%d%d%d%d\n", nums[0], nums[1], nums[2], nums[3]);
// 输入四个互不相同的数字
input_num(num_input);
// quit = compare(nums, num_input);
} while (quit==0);
|