我如何在C中执行此函数的无限循环

时间:2016-06-10 09:20:24

标签: c

我有一个问题,我的循环在序列2停止,我想无限循环函数ambil_nilai()和ulang()直到scanf接收单词" tidak"然后程序停止了,我觉得这样做是对的,请帮助我,请告诉我,如果我的颂歌中有任何不对,请非常感谢你帮助

#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;
}

2 个答案:

答案 0 :(得分: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;
}

请告诉我,如果这是您要找的内容

答案 1 :(得分:0)

我只是想用一个解释来修正matt93代码:

首先,你将malloc固定大小,这样做并不是很有用。另外,您没有检查malloc是否不返回NULL。 此外,您的scanf存在缺陷,因为我们可以轻松地进行缓冲区溢出。 另外,你没有刷新stdin,所以当循环继续时,你的程序中会有一个你并不想要的行为。

这里是纠正所有这些的代码:

#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);
}

您可以阅读STR_HELPER和STR宏的this。 如果您有其他问题,请不要忘记阅读scanf man。