这串C代码里为什么循环后数组元素的值都会发生改变
本帖最后由 mxwawaawxm 于 2019-12-4 22:28 编辑#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 = {0};
char num_input;
int quit=0;
// 生成四个互不相同的数字,并存入数组
generate_num(nums);
printf("%d%d%d%d\n", nums, nums, nums, nums);
do {
printf("%d%d%d%d\n", nums, nums, nums, nums);
// 输入四个互不相同的数字
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) {
break;
}
}
if (j!=i) {
continue;
}
nums=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)) {
return 2;
}
for (j=0;j<i;j++) {
// 输入的字符存在相同的数字
if (num_input==num_input) {
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;
}
}
上面的代码思路如此
int nums = {0};
先声明一个整型数组,4个元素初始化为0;
再调用函数generate_num(nums)生成四个互不相同的数字,并存入数组nums
再声明一个字符数组char num_input;,用以保存用户输入的4个数字字符
接着调用input_num(num_input),让用户输入数字。并利用check_input_num(num_input)函数检查数字是否有效,利用print_input_num(valid, num_input)函数输出反馈信息
回到main函数里,有一个循环,每次,我特意输出一次数组nums的元素。发现循环一次,数组nums的元素会发生改变{:301_1009:}这是哪里出错。编译器也没报错
请大侠们赐教
do {
printf("%d%d%d%d\n", nums, nums, nums, nums);
// 输入四个互不相同的数字
input_num(num_input);
// quit = compare(nums, num_input);
} while (quit==0);
本帖最后由 mxwawaawxm 于 2019-12-4 20:18 编辑
大佬们哪去了,没人回复{:301_1008:}
ps貌似搞清楚了‘
char num_input;
这个字符数组是用来存放4个数字字符,但C语言的字符串最后还有个结束字符'\0'
所以设定的长度4,不够存放
至少也要5{:301_1008:}
页:
[1]