C Programm funktioniert nicht?!!!

Diskutiere mit über: C Programm funktioniert nicht?!!! im Mac OS X Entwickler, Programmierer Forum

  1. junger Mac

    junger Mac Thread Starter MacUser Mitglied

    Beiträge:
    111
    Zustimmungen:
    0
    Registriert seit:
    19.11.2005
    Hallo zusammen!

    Ich soll ein C- Programm schreiben, das wie folgt beschrieben ist:
    Eine Zeichenkette die per Tastatur eingegeben wird soll mittels getchar -Aufrufen die Zeichen nacheinander einlesen und zählen:
    -wieviele Kleinbuchstaben
    -wieviele Grossbuchstaben
    -wieoft jede einzelne Dezimalziffer (0,1,.. , 9) und
    - wieviele Wörter (durch ein oder mehrere Leerzeichen bzw Tabs )
    in der Zeichenkette enthalten sind.
    Anschließend soll am Bildschirm ausgegeben werden was enthalten ist.
    Dann eine Abfage ob das ganze wiederholt werden soll!
    Mein bisheriger Quellcode sieht wie unten eingefügt aus.
    Das Programm macht alles bis auf das zählen der Zahlen!!!
    Ich werde noch ganz gaga, weis echt nicht mehr weiter!!
    Ich bekomme nur wirre Zahlen als Ausgabe!

    # include <stdio.h>
    # include <ctype.h>
    # include <stdlib.h>

    int main (int argc)
    {
    char eingabe, janein;
    int gb, kb, zahl[10], leer, wort, i;

    do
    {

    gb =0; //Variable fuer Grossbuchstabe
    kb =0; //Variable fuer Kleinbuchstabe
    //zahl =0;
    leer =0; //Variable fuer Leerzeichen
    wort =0; //Variable fuer Woerter

    rewind(stdin);
    printf("Zeichekette eingeben: ");

    do
    {
    eingabe =getchar();

    //***************************ueberpruefung GROSSBUCHSTABE*******
    if( isupper(eingabe))
    {
    gb =gb+1;
    leer=0;
    }

    // ***************************ueberpruefung kleinbuchstabe*************
    if( islower(eingabe))
    {
    kb =kb+1;
    leer=0;
    }

    //**************************ueberpruefung wort***************************
    if( isspace(eingabe) && leer !=1)
    {
    leer =1;
    wort =wort+1;
    }

    //************************ueberpruefung Ziffer***************************
    if( isdigit(eingabe))
    {
    //zahl[eingabe-47]++;
    zahl[eingabe] = zahl[eingabe]+1;
    }
    }
    while(eingabe !='\n');

    //************************ausgabe*****************************************
    printf("Grossbuchstaben: %d \n",gb);
    printf("Kleinbuchstaben: %d \n",kb);
    for(i =0; i<10; i =i+1)
    {

    printf("Die Zahl %i kommt %i mal vor.\n",i,zahl);
    }

    printf("Woerter: %d \n",wort);
    printf("Neue Zeichenkette (j/n)?");
    janein = getchar();
    }
    while(janein !='n');


    return 0;
    }
     
  2. Andy-Gard

    Andy-Gard MacUser Mitglied

    Beiträge:
    113
    Zustimmungen:
    0
    Registriert seit:
    27.06.2005
    Arbeitest du mit xcode 2.0 ?
     
  3. qfat

    qfat MacUser Mitglied

    Beiträge:
    238
    Zustimmungen:
    0
    Registriert seit:
    30.01.2005
    c is nich java!

    will heißen die variablen werden nicht nullinitialisiert!
    du musst das array zahl nullen (alle int im array!)

    da du sonst den wert nimmst der im speicher vorher stand

    also dazu gibt es 2Varianten:
    1: mit ner for schleife alles nullen
    2: eleganter: den array mit calloc() erzeugen
     
  4. junger Mac

    junger Mac Thread Starter MacUser Mitglied

    Beiträge:
    111
    Zustimmungen:
    0
    Registriert seit:
    19.11.2005
    ja mit Xcode 2.0

    Im grunde geht es nur um diesen Teil:


    //************************ueberpruefung Ziffer***************************
    if( isdigit(eingabe))
    {
    zahl[eingabe] = zahl[eingabe]+1;
    }
    }
     
  5. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    Registriert seit:
    21.01.2005
    Ohne dir jetzt die Arbeit abnehmen zu wollen sehe ich auf anhieb 2 Sachen:

    1. Hast du dein Array nicht initialisert, daher die komischen Werte.

    2. zahl[eingabe] = zahl[eingabe]+1; Das kann so nicht funktionieren. Überleg dir mal was da gemacht wird. Da wird dein eingelesenes Zeichen einfach nur in seinen ASCII-Wert umgewandelt. So groß ist dein Array ja gar nicht.

    Im übrigen würde ich dir mal empfehlen dein Problem mit dem Compilerflag -Wall zu kompilieren. Da gibts nämlich noch einige schöne Warnungen in deinem Programm.
     
  6. junger Mac

    junger Mac Thread Starter MacUser Mitglied

    Beiträge:
    111
    Zustimmungen:
    0
    Registriert seit:
    19.11.2005
    @ qfat

    Ws meinst du mit
    1: mit ner for schleife alles nullen
    2: eleganter: den array mit calloc() erzeugen

    Ich habe doch oben alle int Variablen auf Null gesetzt??!!
    Wobei funzt das eigentlich: zahl[10] =0; //??
     
  7. qfat

    qfat MacUser Mitglied

    Beiträge:
    238
    Zustimmungen:
    0
    Registriert seit:
    30.01.2005
    du hast alles genullt bis auf dein array.

    also dir fehlt:
    for(i=0;i<10;i++) zahl=0;

    oder du erzeugst das array mit zahl=(int*)calloc(10,sizeof(int));
    (bei der letzten variante das #include <stdlib.h> nicht vergessen)

    wobei du beim calloc() das free() nicht vergessen solltest.

    aber da du mich so fragst solltest du wohl variante 1 nehmen ;) die ist einfacher
     
  8. junger Mac

    junger Mac Thread Starter MacUser Mitglied

    Beiträge:
    111
    Zustimmungen:
    0
    Registriert seit:
    19.11.2005
    @ autoexec.bat

    zu2)

    Damit hast du schon recht, das dachte ich mir auch. Ich hatte vorher noch eine Weitere Zeile über zahl[eingabe] = zahl[eingabe]+1;
    Und zwar eine einga_zahl =atoi(eingabe);
    Das sollte bewirken das die eingelesene Zahl in eine Zahl umgewandelt und als int in einga_za abgelegt wird.
     
  9. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    Registriert seit:
    21.01.2005
    Im Prinzip nicht schlecht. Nur falsch benutzt (deshalb auch der Tipp mit dem -Wall). Der Funktion atoi musst du einen Pointer mitgeben, also atoi(&eingabe) dann sollte es funktionieren.

    Und natürlich free(zahl) nicht vergessen wenn du das Array nicht mehr brauchst. Sonst gibts ein Speicherleck. ;)
     
  10. El Jarczo

    El Jarczo MacUser Mitglied

    Beiträge:
    558
    Zustimmungen:
    9
    Registriert seit:
    07.07.2004
    Deine Aufgabe ist eigentlich darauf ausgelegt mit hilfe der Ascii Tabelle gelöst zu werden. Dort sind die Bereiche A bis Z, a bis z, sowie 0 bis 9, in Zusammenhängenden Zahlwerten hinterlegt. Die Prüfung ob Zahl, Klein- oder Großbuchstabe vereinfacht sich dann zu einfachen Abfragen, ala

    if ((zeichen >= 65) && (zeichen<=90)) gb++;

    Dabei kann man sich auch den automatischen Cast von char zu int zu Nutze machen. Dann wird nähmlich der Asciiwert des Zeichens ausgewertet. Dein Zahlproblem lässt sich dann auch genz einfach lösen. Schau dir mal die Tabellen an. Das Nullen des Arrays muss natürlich sein.

    Ich hoffe diese Erklärung, und ein BLick auf die Tabelle hilft dir.
     
Die Seite wird geladen...
Ähnliche Themen - Programm funktioniert Forum Datum
Mein erstes macOS Programm Mac OS X Entwickler, Programmierer 22.08.2016
C++ Programm von Windows zu Mac? Mac OS X Entwickler, Programmierer 05.05.2016
Xcode Programm in einer interaktiven Konsole starten Mac OS X Entwickler, Programmierer 22.09.2014
Mein Java Programm läuft in der IDE, hängt sich aber ohne IDE auf ? Mac OS X Entwickler, Programmierer 21.01.2014
[Perl] Programm für Funktionsgraphen funktioniert nicht richtig Mac OS X Entwickler, Programmierer 26.08.2013

Diese Seite empfehlen