我正在为播放列表制作一个数据库程序。用户可以输入他们想要添加的播放列表的名称,但是如果这个名称已经存在于struct数组中,它应该显示一个提示,表示它已经存在了。我编写的代码的问题是,例如,如果struct数组中已经有3个值,并且我输入了一个与struct数组中的第二个或第三个名称值匹配的字符串输入,它仍然会添加一个新的播放列表,因为它与第一个值不匹配,因此它将转到there语句中,并将字符串输入作为播放列表名添加。
我想要做的是遍历所有现有的struct数组值,直到找到匹配的值,否则用户的字符串输入应该添加到struct数组中。下面是我写的函数:
void addPlaylist(struct playlist *playlist, int (*index)){
char temp[50];
printf("What do you want your playlist to be called?: ");
scanf("%49s", temp);
if((*index)!=0){
for(int i=0; i<(*index);i++){
if((strcmp(temp, playlist[(i)].name))!=0){
(*index)++;
strcpy(playlist[(*index)].name, temp);
printf("Playlist successfully added!\n");
break;
}else{
printf("%s already exists!\n", playlist[(i)].name);
}
}
} else{
strcpy(playlist[(*index)].name, temp);
printf("Playlist successfully added!\n");
(*index)++;
}
}发布于 2022-06-08 19:03:11
扫描完整的数组以查看它是否已经存在,如果已经存在,则设置一个变量,如果需要,则设置返回的索引。如果没有,则插入。不需要特例索引== 0,因为数组上的循环是空的。类似于:
void addPlaylist(struct playlist *playlist, int (*index)){
char temp[50];
printf("What do you want your playlist to be called?: ");
scanf("%49s", temp);
bool found=false;
for(int i=0; i<(*index);i++){
if((strcmp(temp, playlist[(i)].name))==0){/*It matches*/
found=true;
*index=i;
break;
}
}
if(!found){
strcpy(playlist[(*index)].name, temp);
}
}发布于 2022-06-08 19:39:22
我希望它做的是迭代所有现有的struct数组值,直到它找到一个匹配的值。
简论return;后的printf("%s already exists!\n", playlist[(i)].name);
考虑返回一个值以指示函数结束的原因。
// void addPlaylist(struct playlist *playlist, int (*index)){
int addPlaylist(struct playlist *playlist, int *index){
assert(playlist && index && *index >= 0); // Handle pathologic cases.
char temp[50];
printf("What do you want your playlist to be called?: ");
// Test return value
if (scanf("%49s", temp) != 1) {
return EOF; // No valid input
}
// if ((*index)!=0){ // not needed
for (int i = 0; i < *index; i++) {
// Simplify
if (strcmp(temp, playlist[i].name) == 0) {
printf("%s already exists!\n", playlist[i].name);
return 0; // Nothing added
}
}
strcpy(playlist[*index].name, temp);
printf("Playlist successfully added!\n");
return 1; // Success!
}https://stackoverflow.com/questions/72550783
复制相似问题