首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对结构数组进行迭代,以检查字符串输入是否等于结构数组值?

如何对结构数组进行迭代,以检查字符串输入是否等于结构数组值?
EN

Stack Overflow用户
提问于 2022-06-08 18:49:14
回答 2查看 70关注 0票数 1

我正在为播放列表制作一个数据库程序。用户可以输入他们想要添加的播放列表的名称,但是如果这个名称已经存在于struct数组中,它应该显示一个提示,表示它已经存在了。我编写的代码的问题是,例如,如果struct数组中已经有3个值,并且我输入了一个与struct数组中的第二个或第三个名称值匹配的字符串输入,它仍然会添加一个新的播放列表,因为它与第一个值不匹配,因此它将转到there语句中,并将字符串输入作为播放列表名添加。

我想要做的是遍历所有现有的struct数组值,直到找到匹配的值,否则用户的字符串输入应该添加到struct数组中。下面是我写的函数:

代码语言:javascript
运行
复制
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)++;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-08 19:03:11

扫描完整的数组以查看它是否已经存在,如果已经存在,则设置一个变量,如果需要,则设置返回的索引。如果没有,则插入。不需要特例索引== 0,因为数组上的循环是空的。类似于:

代码语言:javascript
运行
复制
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);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2022-06-08 19:39:22

我希望它做的是迭代所有现有的struct数组值,直到它找到一个匹配的值。

简论return;后的printf("%s already exists!\n", playlist[(i)].name);

考虑返回一个值以指示函数结束的原因。

代码语言:javascript
运行
复制
// 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!
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72550783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档