2017-05-24 1 views
-1

So versuche ich habe meinen Weg durch eine Zuweisung Lernen C zu arbeiten, und habe nur gehofft, für eine Art von Korrektur, wohin ich gehe falschZählwerte in einem 2D-Array - C

Das Szenario ist eine Umfrage, und dies wird i der Ausgang ist erwartet

 POPULARITY TABLE 
    ---------------------------------------------------- 
    City Cricket Footy Tennis Soccer 
    ----------------------------------------------------- 
    Melbourne 4 1 1 4 
    Sydney 4 5 1 0 
    Brisbane 2 2 4 4 
    Adelaide 1 0 2 0 
    ----------------------------------------------------- 

Variablen sind M, S, B, A und 1,2,3,4 für die Tabelle

Jedesmal, produzieren wir meinen Code ausführen Es zählt entweder die Werte nicht oder es steht ein Wert von

#include <stdio.h> 
    int main() 
    { 
     int i, j; 
     char M, B, S, A; 
     int m_cricket = 0, m_footy = 0, m_tennis = 0, m_soccer = 0; 
     int s_cricket = 0, s_footy = 0, s_tennis = 0, s_soccer = 0 
     int b_cricket = 0, b_footy = 0, b_tennis = 0, b_soccer = 0 
     int a_cricket = 0, a_footy = 0, a_tennis = 0, a_soccer = 0 
     int survey[36][2] = {{M, 1}, {S, 2}, {B, 1}, {B, 3}, {M, 2}, {B, 4}, {S, 1}, {A, 3}, {M, 4}, {B, 2}, {B, 1}, {S, 3}, {B, 4}, {B, 4}, {M, 1}, {M, 1}, {B, 3}, {B, 3}, {S, 1}, {S, 1}, {S, 2}, {M, 4}, {M, 4}, {S, 2}, {A, 1}, {S, 2}, {B, 3}, {M, 1}, {B, 1}, {S, 2}, {A, 3}, {M, 4}, {S, 1}, {B, 2}, {M, 3}, {B, 4}}; 

for (int i = 0; i < 36; i++) 
{ 
     for (int j = 0; j == 2; j++) 
     { 
      if (survey[i][j] == M, 1) 
      { 
       m_cricket++; 
      } 
     } 

} 

    printf("\tCity Cricket Footy Tennis Soccer\n"); 
    printf("------------------------------------------------\n"); 
    printf("Melbourne:\t %d\t %d\t %d\t %d\t\n", m_cricket, m_footy, m_tennis, m_soccer); 
    printf("Sydney:\t %d\t %d\t %d\t %d\t\n", s_cricket, s_footy, s_tennis, s_soccer); 
    printf("Brisbane:\t %d\t %d\t %d\t %d\t\n", b_cricket, b_footy, b_tennis, b_soccer); 
    printf("Adelaide:\t %d\t %d\t %d\t %d\t\n", a_cricket, a_footy, a_tennis, a_soccer); 

    return 0; 
} 

Wo bin ich falsch gelaufen? Gibt es eine bessere Möglichkeit, das zu programmieren?

ich nur für Melbourne codiert als wenn diese Codierung, i unter der Logik würde, wenn ich eine Stadt zum Laufen bringen könnte, würde der Rest

+1

'int i, j;' überflüssig ist, da man sie wieder in den Schleifen zu erklären, und sie sind nur in den Schleifen verwendet. – InternetAussie

+0

Bei der C-Programmierung können Sie die Syntax nicht einfach durch Versuch und Irrtum "erraten". Das wird niemals funktionieren. Stattdessen müssen Sie tatsächlich wissen, was Sie tun, an jeder Codezeile, die Sie schreiben. Dieser Code macht keinen Sinn - Sie müssen Zeichenfolgen und Zeichen in Ihrem Programmierbuch für Anfänger studieren. – Lundin

Antwort

1

Diese Schleife ...

for (int j = 0; j == 2; j++) 

... tut nichts. Es läuft nur, während j2 ist. Da es auf 0 initialisiert wird, ist das nie der Fall, also wird der Code innerhalb nie ausgeführt.

Wenn Sie es in einer Schleife über die Werte der inneren Anordnung wollen (0 und 1) Sie überprüfen möchten, ob j weniger als 2 so ist, wie Sie mit Ihrem äußeren Schleife gemacht habe.

for (int j = 0; j < 2; j++) 

Obwohl gegeben Sie scheinen zu versuchen, in den if innerhalb dieser Schleifen beiden Werte gleichzeitig zu überprüfen, vielleicht, was wollen Sie ist diese Schleife mit einer anderen if wie dieser Aussage zu tun, ersetzen?

if ((survey[i][0] == M) && (survey[i][1]== 1)) 

Auch wenn Sie die Absicht mit dem M, sind B, S und A Variablen ist in Zeichen in Ihr Array setzen Sie müssen nur um einfache Anführungszeichen setzen wie 'M' wie sie derzeit keinen Wert zugewiesen werden Dies wird potenziell einen Wert haben. Gleiches gilt auch für die if Erklärung.

So Ihr Code zusammenfassen sollte wie folgt aussehen:

#include <stdio.h> 
int main() 
    { 
    int m_cricket = 0, m_footy = 0, m_tennis = 0, m_soccer = 0; 
    int s_cricket = 0, s_footy = 0, s_tennis = 0, s_soccer = 0 
    int b_cricket = 0, b_footy = 0, b_tennis = 0, b_soccer = 0 
    int a_cricket = 0, a_footy = 0, a_tennis = 0, a_soccer = 0 
    int survey[36][2] = {{'M', 1}, {'S', 2}, {'B', 1}, {'B', 3}, {'M', 2}, {'B', 4}, {'S', 1}, {'A', 3}, {'M', 4}, {'B', 2}, {'B', 1}, {'S', 3}, {'B', 4}, {'B', 4}, {'M', 1}, {'M', 1}, {'B', 3}, {'B', 3}, {'S', 1}, {'S', 1}, {'S', 2}, {'M', 4}, {'M', 4}, {'S', 2}, {'A', 1}, {'S', 2}, {'B', 3}, {'M', 1}, {'B', 1}, {'S', 2}, {''A'', 3}, {'M', 4}, {'S', 1}, {'B', 2}, {'M', 3}, {'B', 4}}; 

    for (int i = 0; i < 36; i++) 
     { 
     if ((survey[i][0] == 'M') && (survey[i][1]==1)) 
     { 
     m_cricket++; 
     } 
     } 

    printf("\tCity Cricket Footy Tennis Soccer\n"); 
    printf("------------------------------------------------\n"); 
    printf("Melbourne:\t %d\t %d\t %d\t %d\t\n", m_cricket, m_footy, m_tennis, m_soccer); 
    printf("Sydney:\t %d\t %d\t %d\t %d\t\n", s_cricket, s_footy, s_tennis, s_soccer); 
    printf("Brisbane:\t %d\t %d\t %d\t %d\t\n", b_cricket, b_footy, b_tennis, b_soccer); 
    printf("Adelaide:\t %d\t %d\t %d\t %d\t\n", a_cricket, a_footy, a_tennis, a_soccer); 

    return 0; 
} 
1

Zwei Dinge zeichnen sich einfach sein:

  • Sie Verwenden Sie nicht initialisierte Zeichenvariablen (M, B, S und A) wie sie etwas bedeuten; Das ist sehr verwirrend.
  • Diese Zeile: if (survey[i][j] == M, 1) macht überhaupt keinen Sinn. Es wird immer die if nehmen, da der Komma-Operator die Bedingung gleich 1 macht.
Verwandte Themen