2016-03-22 18 views
0

benim yarattığım tuşlarının benim dizisi argv komut satırı argümanı içerip içermediğini görmek için çalışıyorum, ancak ben hata almaya devam: Nasıl ben kod ile bulunan bu iki argüman karşılaştırabilirsiniz oArgv'yi bir dizi öğe ile nasıl karşılaştırabilirim?

"incompatible pointer types passing 'char **' to parameter of type 'const char *';" 

olduğunu herbiri? senin tek komut satırı argümanı varsayarak

char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"}; 

    for (int i = 0; i < (sizeof(scale_array)/sizeof(char)); i += 1) { 
     if (strcmp(argv, scale_array[i]) == 0) { 
      printf("Found it!"); 
     } 
     else { 

     } 
+0

Yan Not: 'sizeof (char)' değişmez (her zaman 1) –

+3

Ve bence sizeof (char *) sizeof (char) değil – 12431234123412341234123

+2

Ortak bir deyim 'sizeof (array)/sizeof (array [0] ]) 'türüne sabit kod yazmak zorunda değilsiniz, ve sonra türünü yanlış yapmak için bir fırsat yok. – Barmar

cevap

1

Komut satırı giriş dizesine erişmek için argv'u doğru kullanmıyorsunuz. Ayrıca size of array

İşte
(sizeof(scale_array)/sizeof(char*)) 

birden komut satırı girişi ile modifiye kodudur (sizin durumunuzda) böyle belirlenmelidir.

int main(int argc, char** argv) 
{ 
    char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"}; 
    int j = 1; 
    for (int i = 0; i < (sizeof(scale_array)/sizeof(char*)); i++) 
    { 
     if (strcmp(argv[j], scale_array[i]) == 0) 
     { 
      printf("Found it! %s \n", argv[j]); 
      j++;  
      i = -1; 
     } 

     if(j == argc) 
     { 
      break; 
     } 
    } 
    return 0; 
} 

Bu yardımcı olur umarım.

+2

"Argv" ve "scale_array" için aynı dizini kullanmamalısınız. Bu sadece, kullanıcı argümanları dizide oldukları sırayla aynı sırada verdiğinde test edecektir. Ve argv [0] 'bir argüman değil, programın adı. – Barmar

+0

@Barmar Kodu güncellendi. Teşekkürler. –

+0

Sadece bir döngü değil, yuvalanmış döngülere ihtiyacınız var. – Barmar

1
char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"}; 

for (int i = 0; i < (sizeof(scale_array)/sizeof(char)); i += 1) { 
    if (strcmp(argv[1], scale_array[i]) == 0) { 
     printf("Found it!"); 
    } 
    else { 

    } 

olağan bir durumdur ki, argv[1] içindedir.

Argv karakter dizileri için işaretçi bir vektör olduğunu unutmayın.

+1

'sizeof (scale_array)/sizeof (char)' yanlıştır. – chux

+0

Teşekkür ederiz, işaretçileri hatırlamak kadar basit görünüyor. – Jeremy

İlgili konular