2016-06-10 12 views
-4

Ich habe eine Frage, meine Schleife ist bei Sequenz 2 gestoppt, ich möchte die Funktion ambil_nilai() und ulang() bis zum scanf erhalten das Wort "tidak" und dann hört das Programm auf, und es scheint, ich kann es nicht ganz richtig machen, bitte bitte hilf mir, und bitte sag mir, ob es in meiner Ode etwas nicht stimmt, vielen Dank für deine Hilfe.Wie mache ich Endlosschleife in dieser Funktion in C

#include <stdio.h> 

int ambil_nilai(){ 
    int nilai, NMK; 
    printf("Masukkan mata kuliah yang ingin dicari analisa nya:\n"); 
    scanf("%d",&NMK); 
    printf("Masukkan nilai mata kuliahnya:\n"); 
    scanf("%d",&nilai); 
    if(nilai<=50){ 
     printf("kamu harus belajar lagi karena nilai kamu kurang\n\n"); 

    } 
    else if(nilai>=51){ 
     printf("nilai kamu sudah cukup untuk lulus mata kuliah\n\n"); 
    } 
    return 0; 
} 

char ulang(){ 
    char lagi='y'; 
    char tidak='n'; 
    printf("ingin coba mata kuliah lain? tekan y untuk yes, n untuk no\n"); 
    scanf("%c %c", &lagi,&tidak); 

    if(lagi){ 
     system("clear"); 
     return ambil_nilai(); 
    }else if(tidak){ 
     printf("terima kasih sudah menggunakan program ini\n");  
    } 
    return 1; 
} 

int main() 
{ 
    printf("\n\n"); 
    printf("ini adalah mata kuliah kamu:\n"); 
    printf("1. A\n"); 
    printf("2. B\n"); 
    printf("3. C\n\n"); 
    ambil_nilai(); 
    ulang(); 

    printf("\n\n"); 
    return 0; 
} 
+1

'while ((1) {}' erstellt eine Endlosschleife für Sie. Verwenden Sie eine 'if'- und eine' break'-Anweisung, um die Schleife zu verlassen. – Evert

+0

Wenn Sie eine Schleife ** bis ** * scanf erhält das Wort "tidak" * dann willst du keine Endlosschleife. Du hast dir einfach deine Stoppbedingung gesagt. –

+0

'für (;;) {}' erzeugt auch eine Endlosschleife. – codeflag

Antwort

0

Ich möchte nur matt93 Code mit einer Erklärung korrigieren:

Zuerst malloc Sie eine feste Größe, so das ist nicht wirklich nützlich. Außerdem haben Sie nicht überprüft, ob malloc NULL nicht zurückgibt. Darüber hinaus ist Ihr Scanf fehlerhaft, da wir einen Pufferüberlauf leicht durchführen können. Außerdem wird die Stdin nicht gelöscht. Wenn die Schleife also fortgesetzt wird, haben Sie ein Verhalten in Ihrem Programm, das Sie nicht wirklich wollen.

Hier ist der Code, der all dies zu korrigieren:

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

#define STR_HELPER(str) #str 
#define STR(str)  STR_HELPER(str) 

#define ARRAY_LEN 5 

int main(void) 
{ 
    char string[ARRAY_LEN + 1]; 
    int c; 

    do { 
     printf("Enter 'tidak' please\n"); 
     scanf("%"STR(ARRAY_LEN)"[^\n]", string); 
     while ((c = getchar()) != '\n' && c != EOF); 
     printf("Got : '%s'\n", string); 
    } while (strcmp(string, "tidak") != 0); 

    return (0); 
} 

Sie können this für STR_HELPER und STR Makro lesen. Vergessen Sie nicht, scanf man zu lesen, wenn Sie eine andere Frage haben.

+0

omg, ihr seid erstaunliche hochentwickelte Programmierer .. ich besitze euch große Zeit ... ich dachte sogar nicht über Pufferüberlauf nach, aber jetzt werde ich darüber nachdenken ! –

0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char *string = (char*) malloc(60, sizeof(char)); 

while (scanf("%s", string) > 0) { 
    if (strcmp(string, "tidak") == 0) break; 
} 

lassen Sie mich wissen, wenn das war, was Sie suchen

Verwandte Themen