Beklenen ')' önce ';' belirteç C

0 ile 100 arasında tüm çift sayıların ^ 2, ^ 4 ve ^ (1/3) çıktısını alan bir program yapmaya çalışıyorum. Bu benim sahip olduğum şey.

#include 
#include 
main(){
   int a, b, c, i;
   for (i=0; i<100; i=i+2;)
      a = (1*1);
      b = (i*i*i*i);
      c = pow(i, (1/3));
      printf("%d, %d, %d", a, b, c);
      return 0;
}

Bana 6. satırda yazan bir hata veriyor.

error: expected ')' before ';' token.

Bu benim c ile ilk günüm, bu yüzden şu anda gerçekten utanıyorum.

1
Burada bir soru bile yok, derleyiciniz size zaten hatayı söylüyor.
katma yazar Alejandro Díaz, kaynak
C'de, bir kod bloğu içinde birden fazla satır yürütülmesi için ('for' loop gibi), kod bloğunun bir açılış ve kapanış ayracı içermesi gerekir; '{' ve '}' 'e benzer: for (....) {....} aksi halde yalnızca sonraki ifade döngünün bir parçası olarak değerlendirilir. çizgi: 'a = (1 * 1);' her zaman 'a' nın 1 olarak ayarlanmasıyla sonuçlanacaktır. Asıl aranan şeyin '1' karesi olduğundan şüpheliyim.
katma yazar user3629249, kaynak

7 cevap

Bir for döngüsü gibi görünmesi bekleniyor:

for (initialization; condition; increment/decrement)

Seninki öyle görünmüyor. Parantez içinde tam olarak iki noktalı virgül bulunduğunu unutmayın.

4
katma

For loop deyimi, üç bölümünü ayırmak için yalnızca iki noktalı virgül gerektirir.

Bu yüzden şöyle görünmeli:

for (i = 0; i < 100; i = i + 2)

Notice that there is a semicolon that separates i=0 and i < 100.

Ayrıca, sadece i + = 2 diyerek i = i + 2 'yi basitleştirebilirsiniz.

Kodunuzun geri kalanına gelince,

c = pow(i, (1/3));

Bu işe yaramaz. C kodunda 1/3 , 0 olarak değerlendirilir, çünkü C derleyicisi bunu tam sayı bölümü olarak kabul eder. 1.0/3.0 'ı kullanmak isteyeceksiniz.

3
katma

remove the semicolon in the for statement after i=i+2;

for (i=0; i<100; i=i+2)

Ayrıca muhtemelen vücudun etrafında bazı kaşlı ayraçlar kullanmanız gerekir. Bir for döngüsü sadece tek bir ifadedir.

Gibi bir şey

for (i=0; i<100; i=i+2) {
      a = (1*1);
      b = (i*i*i*i);
      c = pow(i, (1/3));
      printf("%d, %d, %d", a, b, c);
}

Düzenle

C'deki for ifadesinin parantez içindeki üç bölümden oluşacağını ve parantez kapanmasının ardından tek bir deyim veya küme parantezleri içine alınmış bir dizi deyimden oluşan bir bileşik deyim olduğunu düşünüyorum.

A statement such as for (i=0; i < 10; i=i+2) printf(" i = %d\n", i); will print out a sequence of numbers as 0, 2, 4, 6, 8. This is similar to a set of statements using a while statement as in:

i=0;
while (i < 10) {
    printf (" i = %d\n", i);
    i=i+2;
}

The three sections in the parenthesis of the for statement are optional so you could have Gibi bir şey the following which is similar in structure to a while loop

i=0;
for ( ; i < 10; ) {
    printf (" i = %d\n", i);
    i=i+2;
}

içinde birinci ve üçüncü bölümleri for ifadesinin dışına taşıdınız. for ifadesinin bir bileşik ifadeye sahip olması nedeniyle, her biri noktalı virgülle biten aşağıdaki ifadelerin için öğesinin bir parçası olduğunu belirtmek için kaşlı ayraçlar kullanmamız gerektiğine dikkat edin Beyan.

Aşağıdaki örnekte olduğu gibi, döngüsü için virgülle ayrılmış ifadeleri de kullanabiliriz:

int i, j, k;
for (i = j = 0, k = 3; i < 10 && k > 1; i++, j+=2) {
    printf (" i = %d j = %d k = %d\n", i, j, k);
}

Yukarıdakilere benzer olacaktır:

int i, j, k;
j = 0;
i = j;
k = 3;
while (i < 10 && k > 1) {
    printf (" i = %d j = %d k = %d\n", i, j, k);
    i++;
    j+=2;
}
2
katma

Aşağıdaki kod, kaydedilen kod için önerilen tüm düzeltmeleri gösterir.

değişiklikleri açıklamak için yorumlar eklendi

#include //printf
#include  //pow

int main() //<-- use valid return type
{
   int a;   //value ^2
   int b;   //value ^4
   double c;//value ^1/3 note: pow() returns a double
   int i;   //loop index

  //the following loop calculates all the request values
  //from 0 through 98. did you want to include '100'?
   for (i=0; i<100; i+=2)//< corrected for statement
   {                     //< added braces so whole code block loops
      a = (i*i);         //< squared value, not 1
      b = (i*i*i*i);
      c = pow( (double)i, (1.0/3.0) );//< corrected integer divide
      printf("%d, %d, %lf \n", a, b, c); 
                          //properly printed double,
                          //added newline
                          //so output displayed immediately
   }//end for

   return 0;
}//end function: main
1
katma

For loop'un başlatıcısını ve test koşulunu birlikte karıştırdınız. Bunun gibi görünecek şekilde değiştirin:

for (i=0; i<100; i=i+2) 
1
katma
BTW, bu döngü için sadece bir sonraki ifadeyi içerecektir. Daha fazla ifadenin dahil edilmesini kastediyorsanız, for döngüsüne ait tüm ifadeler için çevreleyen parantez kullanmalısınız.
katma yazar StarPilot, kaynak
Evet bu hile yaptı.
katma yazar Jeff H, kaynak

for döngüsü doğru değil

for (i=0, i<100; i=i+2;)

Böyle olmalı

for (i=0; i<100; i=i+2)
0
katma

@ Bill Lynch'in dediği gibi, döngü için yapmanız gerekenler:

#include 
#include 
main(){
   int a, b, c, i;
   for (i=0; i<100; i=i+2)//changed comma to a semicolon
   {//add this bracket
       a = (1*1);
       b = (i*i*i*i);
       c = pow(i, (1/3));
       printf("%d, %d, %d", a, b, c);
   }//add this bracket
   return 0;
}

Fonksiyonları için parantez de unutma.

0
katma
Maalesef sonunda birisini yakalayamadım.
katma yazar Robert, kaynak