do while-Schleife für ja/Nein Benutzer auffordern
Mein Programm findet die Primfaktoren ist...das einzige, was, das ich tun müssen, ist diese Art der Ausgabe:
Möchten Sie versuchen, eine andere Nummer? Sagen Sie Y(es) oder N(o): y
//fragt nach einer anderen Nummer (geht über das Programm wieder)
Möchten Sie versuchen, eine andere Nummer? Sagen Sie Y(es) oder N(o): n
//Danke für die Verwendung meines Programms. Good Bye!
Ich habe mein Versuch dazu weiter unten...Wenn ich geben Sie n ein, es macht die richtige Ausgabe. Aber wenn ich tippe " y " es sagt nur das gleiche n tut....Wie kann ich die Schleife das gesamte Programm, ohne den code für das Programm innerhalb dieser while-Schleife, die ich habe? Also, wenn ich drücken Sie y, geht es durch das Programm wieder?
int main() {
unsigned num;
char response;
do{
printf("Please enter a positive integer greater than 1 and less than 2000: ");
scanf("%d", &num);
if (num > 1 && num < 2000){
printf("The distinctive prime facters are given below: \n");
printDistinctPrimeFactors(num);
printf("All of the prime factors are given below: \n");
printPrimeFactors(num);
}
else{
printf("Sorry that number does not fall within the given range. \n");
}
printf("Do you want to try another number? Say Y(es) or N(o): \n");
response = getchar();
getchar();
}
while(response == 'Y' || response == 'y');
printf("Thank you for using my program. Goodbye!");
return 0;
} /* main() */
InformationsquelleAutor Tucker Sampson | 2013-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wahrscheinlich, dass Sie bekommen etwas, das nicht
y
ausgetchar
und die Schleife wird beendet, der Zustand ist nicht aufeinander abgestimmt sind.getchar()
möglicherweise verwenden Sie einen Puffer, so dass, wenn Sie geben Sie " y " und drücken Sie die EINGABETASTE, erhalten Sie die char-121 (y) und 10 (enter).Versuchen Sie die folgenden Programme und sehen, welche Ausgabe erhalten Sie:
Sehen Sie etwas wie dies:
Was man sehen kann, ist, dass die Tastatur-Eingabe ist zwischengespeichert und mit dem nächsten Lauf der
getchar()
erhalten Sie die gepufferten newline.BEARBEITEN: Meine Beschreibung ist nur teilweise richtig in Bezug auf Ihr problem. Verwenden Sie
scanf
Lesen Sie die Nummer ein, die Sie testen sind gegen. Also tun Sie: Anzahl, enter, y, enter.scanf
liest die Zahl, die Blätter, die das Zeilenende aus Ihrem geben Sie in den Puffer, derresponse = getchar();
liest die neue Zeile und speichert die newline inresponse
beim nächsten Aufrufgetchar()
(zum strip den Zeilenumbruch, den ich oben beschrieben) bekommt der'y'
und Ihre Schleife wird beendet.Können Sie dieses Problem beheben, indem
scanf
Lesen Sie den Zeilenumbruch, so dass es nicht zu Verweilen, in die Puffer:scanf("%d\n", &number);
.while
Aussage, vergleichen Sie die Werte der integer ASCII-Werte fürY
undy
.Sorry, ich kann das nicht genauer auszuführen, was Sie wollen mich zu tun. Könntest du ein bisschen genauer?
InformationsquelleAutor nemo
Beim Lesen der Eingabe mit scanf (wenn Sie Ihre Nummer oben), wird die Eingabe gelesen, nachdem Sie die return-Taste gedrückt wird, aber der Zeilenumbruch erzeugt durch die return-Taste wird nicht verzehrt, von scanf.
Das bedeutet, dass Ihre ersten Aufruf von getchar() wird wieder das newline (sitzt immer noch im Puffer), die nicht ein 'Y'.
Wenn Sie drehen Sie die beiden Aufrufe von getchar() - wo wird die zweite ist die, die Sie zuweisen, um eine variable, wird Ihr Programm die Arbeit.
InformationsquelleAutor James Boutcher
setzen Sie einfach
getchar()
nachscanf
Erklärung von Ihnen, dass Essen unnötige'\n'
aus dem Puffer...Über drei Stunden habe ich endlich den Ruf hier aus ein down vote. Ich dachte, dass ich es nie benutzen. Vielen Dank, dass ich es einmal tun.
"Wie kann ich die Schleife das gesamte Programm, ohne den code für das Programm innerhalb dieser while-Schleife, die ich habe? Also, wenn ich drücken Sie y, geht es durch das Programm wieder?" Ich habe einfach die gegebenen Antworten für diese beiden Aussagen von ihm... mrunion können Sie versuchen, den Beispielcode habe ich gegeben und, wenn das nicht funktioniert, können Sie drücken Sie die down-Taste...
Deine Lösung funktioniert nicht (und ich es getestet habe). Das Problem hat nichts zu tun mit der flow und die Verzweigung der seinen code. Es geht darum, wie
response=getchar()
ist wieder ein überbleibsel newline im Eingabepuffer von der scanf oben.ahhh ok..!! Ich werfe die Frage falsch..!! Ich entfernte alle seine code aus, wenn ein Teil... sorry für die Missverständnisse!!
InformationsquelleAutor Chirag Desai
Wie andere gesagt haben, es ist eine single '\n' Zeichen im input-stream übrig von Ihrer früheren Aufruf von scanf().
Glücklicherweise der standard-Bibliothek-Funktion fpurge(FILE *stream) löscht alle input-oder output-gepuffert in den Bach. Wenn überall platziert zwischen Ihre Aufrufe von scanf() und getchar(), das folgende Los stdin nichts im Puffer verbleiben:
InformationsquelleAutor Nocturno