Не удается создать функцию для создания уникального массива - PullRequest
1 голос
/ 27 марта 2020

Назначение кода: я пытаюсь создать код, который из пользовательского ввода будет генерировать массив длины «size (не более 7)» из пользовательского ввода, используя функцию «uniqueRand», а затем генерировать случайные числа из 1-9, затем используйте функцию 'found', чтобы проверить, присутствует ли уже число в массиве, а затем создайте новое число, если оно есть.

Проблема: при компиляции я получаю предупреждение о том, что переменная 'value' не используется, но я объявляю его в функции, а затем использую его в для l oop под ним

#include <stdio.h>

#include <time.h>

#include<stdlib.h>

int uniqueRand (int a[], int size);

int found (int a[], int size, int value);

int main (){
int size, guesses;
printf ("Number of digits?: ");
scanf ("%d", &size);
int a[size];
printf ("\nNumber of guesses?: \n"); 
scanf ("%d", &guesses);  
int uniqueRand (int a[],int size);  
    for(int i=0;i<size;i++){
        printf ("%d",a[i]);
            //Print Answer Code  
    }      
}
int uniqueRand (int a[], int size){
      //Generate Random Array Function
int value;
    for (int i = 0; i < size; i++){
        if (i == 0){
            a[0] = rand () % 8 + 1;
        }  
        else{
            while (1){
                a[i] = rand () % 8 + 1;
                value = a[i]; //value to check for     
                int found (int a[],int size,int value);//Check if value is in a[], if true then redo
            }
        }
    }
return 1;
}

int found (int a[], int size, int value){   
    for(int i=0;i<size;i++){    
        if (a[i] == value){ //checks if it is in a[i]  
            break;
            return 1;
        }
    //if it is return 1 and break, because need a new number          
    }
return 0;
}

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

У меня есть еще одна ошибка во время выполнения, в том, что, кажется, найдено (a, размер, значение) функции Если найденное находит значение, оно возвращает i, если ничего не находит, возвращает -1, а while (1) {должно прерваться, но это не так, и код выполняется вечно.

#include <stdio.h>

#include <time.h>

#include<stdlib.h>

int uniqueRand (int a[], int size);

int found (int a[], int size, int value);

int main (){

int size, guesses;

printf ("Number of digits?: ");

scanf ("%d", &size);

int a[size];
printf ("\nNumber of guesses?: \n");

scanf ("%d", &guesses);

uniqueRand (a,size);
//Generate Random Array Callout

        for(int i=0;i<size;i++){

        printf ("%d",a[i]);
//Print Answer Code  
    }   

}

int uniqueRand (int a[], int size){
//Generate Random Array Function
    int value;
    srand(time(NULL));
    for (int i = 0; i < size; i++){

        if (i == 0){    
            a[0] = rand () % 8 + 1; 
        }         
        else
        {
            while (1){
                a[i] = rand () % 8 + 1;
                value = a[i]; //value to check for     
                found (a,size,value);
             //Checks to see if value is in a[] already, if true then redo 
                    if (found(a,size,value) == -1) 
                    //If -1 return, number is unique, break
                        break;
            }

        }

    }
return a[size];

}

int found (int a[], int size, int value){

    for(int i=0;i<size;i++){

        if (a[i] == value) //checks if value is in a[i]  
            return i; //if yes, returns positive number
    }                       
    return -1; //return -1 if unique        
}
0 голосов
/ 27 марта 2020

Эта строка

int found (int a[],int size,int value);//Check if value is in a[], if true then redo

имеет синтаксис объявления прототипа, но ваш комментарий, похоже, указывает на то, что вы считаете это вызовом функции. Не то. Помимо необычного объявления прототипа внутри функции (я рекомендую этого не делать ...) это означает, что значение записывается, но никогда не читается.

Мне бы пришлось догадываться, но то, что вы намереваетесь сделать, вероятно требует синтаксиса вызова для функции, которая будет выглядеть примерно так (обратите внимание на отсутствие типов):

found(a, size, value);

Я не говорю, что это функционально достигает цели, но синтаксис означает, что теперь value фактически используется для чего-то, вместо того, чтобы быть записанным и проигнорированным.

Ваша функция имеет возвращаемое значение, и вы, вероятно, захотите его использовать (строка выше возвращаемого значения игнорируется ... ). Но это не входит в сферу вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...