我有一个问题,我的循环在序列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;
}
答案 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。