簡體   English   中英

如何遍歷結構數組以檢查字符串輸入是否等於結構數組值

[英]How do I iterate over a struct array to check if string input is equal to a struct array value

我正在為播放列表制作一個數據庫程序。 用戶可以輸入他們想要添加的播放列表的名稱,但如果該名稱已經存在於結構數組中,它應該顯示一個提示,說明它已經存在。 我編寫的代碼的問題是,例如,如果結構數組中已經有 3 個值,並且我輸入了一個與結構數組中的第二個或第三個名稱值匹配的字符串輸入,它仍然會添加一個新的playlist 因為它與第一個值不匹配,所以它會 go 已經轉到 else 語句並將輸入的字符串添加為播放列表名稱。

我想要它做的是迭代所有現有的結構數組值,直到找到匹配值,否則應該將用戶的字符串輸入添加到結構數組中。 下面是我寫的function:

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)++;
    }
}

掃描整個數組以查看它是否已經存在,如果存在則設置一個變量,如果需要則設置返回的索引。 如果沒有則插入。 您不需要特殊情況 index == 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);
    }
}

我想要它做的是迭代所有現有的結構數組值,直到找到匹配值

只需return; printf("%s already exists,\n". playlist[(i)];name);


考慮返回一個值來指示 function 結束的原因。

// 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!
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM