吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1246|回复: 1
收起左侧

[已解决] 这串C代码里为什么循环后数组元素的值都会发生改变

[复制链接]
mxwawaawxm 发表于 2019-12-3 22:39
本帖最后由 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);

2019-12-03_223813.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| mxwawaawxm 发表于 2019-12-4 19:16
本帖最后由 mxwawaawxm 于 2019-12-4 20:18 编辑

大佬们哪去了,没人回复


ps貌似搞清楚了‘
[C] 纯文本查看 复制代码
char num_input[4];

这个字符数组是用来存放4个数字字符,但C语言的字符串最后还有个结束字符'\0'
所以设定的长度4,不够存放


至少也要5
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表