I’m writing a program that is supposed to take in a list of names from the user, store them in an array, and then search through the list to check and see if the next name the user enters is part of the original list of names.
The issue I’m having is that when I go to enter a list of names, it only saves the last name entered into the list. Here is the part of code where I have problem:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX_NAMELENGTH 10
#define MAX_NAMES 5
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH]);
int main()
{
char names[MAX_NAMES][MAX_NAMELENGTH];
initialize(names);
getch();
return 0;
}
void initialize(char names[MAX_NAMES][MAX_NAMELENGTH])
{
int i,Number_entrys;
printf("How many names would you like to enter to the list?");
scanf("%d",&Number_entrys);
if (Number_entrys>MAX_NAMES) {
printf("Please choose a smaller entry");
}
else {
for (i=0; i<Number_entrys; i++){
scanf("%s",names[i]);
}
}
printf("%s",names);
}
That should read
scanf("%s",names[i]);Right now, you are storing it as
scanf("%s",names);, which is equivalent toscanf("%s",names[0]);So, you are overwriting that same array entry in every pass.
EDIT:
Also, when you pass
char names[][]to a function, it only passes the pointer to the first element. You should declare atleast one bound of it, to the same value as the one to which you declared it.(Reference)