Reputation: 922
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);
}
Upvotes: 1
Views: 24307
Reputation: 46728
That should read scanf("%s",names[i]);
Right now, you are storing it as scanf("%s",names);
, which is equivalent to scanf("%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.
int main(){
//To accept 2 names of 2 characters each
char names[2][2];// or char** names;
initialize(names, 2,2);
}
void initialize(char names[][2],const int MAX_NAMES,const int MAX_NAMELENGTH){ .. }
^ syntax error if index not present
Upvotes: 4
Reputation: 63471
To check your entries so far, you need to loop from 0
to i-1
(after reading into names[i]
) and check each one against the most recent.
To compare strings you can use strcmp
:
if( strcmp(names[i], names[j]) == 0 ) {
/* Duplicate name - reboot universe */
}
Upvotes: 0
Reputation: 3366
You should store the name into a specific entry in the array:
scanf("%s", names[i]);
printf("%s\n", names[i]);
also few generic issues:
Upvotes: 2