• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Xcode While Schleife Programmieren, Fehler

elk00

Pferdeapfel
Registriert
03.09.13
Beiträge
78
Hallo erstmal,
Ich hoffe ich bin nicht im falschen Themengebiet wenn ja, SORRY!

Also wir Programmieren in der Schule nun bisschen nichts großes.
C programmieren mir Feldern Strangs Funktionen usw.
Nun versuche ich halt soviel wie möglich mit MacOSX zu machen für die Schule
und so wenig wie möglich mit Windows. Was sich leider mit MathCAD EPlan Step7 und TIA nicht ganz ausgeht :-c

Nun da ich CodeRunner und Xcode am MacBook drauf habe, programmiere ich da währen die anderen
auf ******* mit Visual Studio arbeiten.
Seit kurzem hatten wir eine HÜ nicht besonders und ziemlich leicht wir sollten ein Programm schreiben, bei dem wir einen Text ein geben und als Ausgabe die Anzahl der Großbuchstaben, Kleinbuchstaben, Ziffern und Leerzeichen bekommen.
Und am ende kommt eine Abfrage ob wir das Programm noch einmal durchführen wollen( habe mit einer while Schleife gemacht)
Nun das Problem: Wenn ich die Abfrage am Ende mache(Sie wollen noch einen Durchgang? Dann druecken sie 0, zum Beenden 1:) und ich 0 drücke wird das Programm ganz gleich mit den vorherig einsgegeben Text Analysiert und ich somit keinen neuen Text eingeben kann, dies sieht so aus:
Bildschirmfoto 2013-11-19 um 23.00.07.png

Das komische ist bei Visual Studio Funktioniert alles tadellos(das ärgert mich)

Hier der Programmcode:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{


char string[100] = {0};
int laenge;
int iG=0;
int iK=0;
int iZ=0;
int iL=0;
int w=0;
int i,j;


while (w==0)
{
printf("Bitte eine Zeichenkette eingeben:");
fgets (string, 99 ,stdin);
fflush(stdin);
string[strlen(string)-1] = '\0';


// Laenge
laenge = strlen(string);

// Großbuchstaben
for (i=0; i< strlen(string); i++)
{
for (j='A'; j <='Z'; j++)
{
if (string == j)
{
iG++;
}
}
}

// Kleinbuchstaben
for (i=0; i< strlen(string); i++)
{
for (j='a'; j <='z'; j++)
{
if (string == j)
{
iK++;
}
}
}

// Ziffern
for (i=0; i< strlen(string); i++)
{
for (j='0'; j <='9'; j++)
{
if (string == j)
{
iZ++;
}
}
}

// Leerzeichen
for (i=0; i< strlen(string); i++)
{
for (j=' '; j <=' '; j++)
{
if (string == j)
{
iL++;
}
}
}



printf("\n\nLaenge: %d\n", laenge);
printf("Anzahl der Großbuchstaben:%d\n", iG);
printf("Anzahl der Kleinbuchstaben:%d\n", iK);
printf("Anzahl der Ziffern:%d\n", iZ);
printf("Anzahl der Leerzeichen:%d\n", iL);
printf("\n\nSie wollen noch einen Durchgang? Dann druecken sie 0, zum Beenden 1:");
scanf("%d", &w);
fflush(stdin);
}
return0;


}


Tut mir Leid für das so lange hin und her schreiben, ich hoffe ich hab das gut erklärt und ich hoffe jemand hat eine Antwort drauf :-D
 

ImperatoR

Roter Astrachan
Registriert
02.12.06
Beiträge
6.261
Mod Info

In den Developer-Bereich verschoben.
 

elk00

Pferdeapfel
Registriert
03.09.13
Beiträge
78
Hab nichts gefunden außer das "\n" mit "fgets (string, 99 ,stdin);" auch eingelesen wird und es somit die Eingabe überspringt.
Könntest du mir bitte das googlen ersparen und die Lösung sagen?
 

frostdiver

Zwiebelapfel
Registriert
19.06.12
Beiträge
1.285
Ich habe leider auch keine Ahnung von den unteren C-Mysterien. Ich nutze es nur begrenzt innerhalb von Objective-C.
Es liegt halt daran, dass fflush(stdin) nur bei Microsoft funktioniert.
Eine Möglichkeit wäre z.B. so was hier (deinen "string" habe ich hier mal missbraucht):

Code:
...
        [COLOR=#3D1D81]fgets[/COLOR](string,[COLOR=#BB2CA2]sizeof[/COLOR](string),[COLOR=#78492A]stdin[/COLOR]);
        [COLOR=#3D1D81]sscanf[/COLOR](string,[COLOR=#D12F1B]"%d"[/COLOR], &w);
[COLOR=#008400]//        scanf("%d", &w);[/COLOR]
[COLOR=#008400]//        fflush(stdin);
[/COLOR][COLOR=#333333]}[/COLOR]
[COLOR=#BB2CA2]return [COLOR=#272ad8]0[/COLOR][COLOR=#000000];[/COLOR][/COLOR]
[COLOR=#333333]}[/COLOR]