2014-08-28 38 views
0

由於在C它似乎是不可能使用開關字符(只有整數)即時通訊嘗試使用if函數作出簡單的提示,問題是在scanf點後該程序總是在此點崩潰puts("Confirmas que quieres borrar[s\\n]")或「你確定要刪除它嗎?」。無法獲得該功能的工作,程序總是在提示後崩潰

void borrar_peliculas(struct videoclub peliculas[30],int p) { 
    char titulo_pelicula[30], resp_eliminar; 
    int k = 0; 

    puts("\a\nBorrador de peliculas"); 

    puts("\nDime el titulo de la pelicula a ser borrada\n"); 
    scanf("%30s", titulo_pelicula); 

    for (k = 0;k < p ;k++) { 

     if (strcmp(peliculas[k].nombre,titulo_pelicula) ==0) { 

      puts("\nConfirmas que quieres borrar[s\\n]\n"); 
      fflush(stdin); 
      scanf("%c", resp_eliminar); 

      if(resp_eliminar=='s') { 

       peliculas[k].id = 0; 
       strcpy(peliculas[k].nombre," "); 
       strcpy(peliculas[k].categoria," "); 
       strcpy(peliculas[k].nom_actor," "); 
       strcpy(peliculas[k].ape_actor," "); 
       peliculas[k].nota = 0; 

       break; 

      } 

      if(resp_eliminar=='n') { 
       puts("\a\nSaliendo\n"); 
       break; 
      } 

     } else { 
      puts("\nNo encontrado\n"); 
     } 
    } 
} 
+2

可以在'char'上'切換'。你以前怎麼做? – jwodder 2014-08-28 21:24:08

+1

請等待其他人閱讀您的代碼之前排除您的縮進。 – 2014-08-28 21:24:48

+0

我用過'case'或case'n': – 2014-08-28 21:25:04

回答

1

這裏有一個非常大的錯誤。 scanf函數需要指針指向將存儲輸入的變量。您當前的程序調用未定義的行爲。

取而代之的是:

scanf("%c", resp_eliminar); 

這樣做:

scanf("%c", &resp_eliminar); 
+0

是的,那個......一個人告訴我永遠不要在一個字符或字符串中放一個&......謝謝! – 2014-08-28 21:27:59

+0

這個傢伙意味着當使用'scanf'掃描字符串('%s')到字符數組中時,您不需要'&'在變量名之前。 – 2014-08-29 02:24:43

2

scanf需要一個指針。如果你用scanf("%c", &resp_eliminar);代替scanf("%c", resp_eliminar);它會起作用。

相關問題