C 当程序到达某一行代码时就会冻结

C 当程序到达某一行代码时就会冻结,c,C,我对c非常陌生,问题是当它达到某一行时,程序就会冻结。我不知道为什么以及如何修复它。我的代码有什么问题吗?还是终端坏了 #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> float cinta; float benci; float hasil; char nama [100]; char pacar [100]; char tanya;

我对c非常陌生,问题是当它达到某一行时,程序就会冻结。我不知道为什么以及如何修复它。我的代码有什么问题吗?还是终端坏了


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

float cinta;
float benci;
float hasil;

char nama [100];
char pacar [100];
char tanya;

int main(){

    printf("hallo, selamat datang di game seberapa cinta anda! \n");
    printf("siapa nama anda? ");
    scanf ("%s \n",nama);
    printf ("Siapa nama pacar anda? ");
    scanf ("%s \n",pacar);
    printf ("Apakah anda siap untuk di kalkulasi? ");
    scanf ("%c \n",tanya); // here's the line
    if ((tanya == 'y')||(tanya == 'Y')) {
        srand(time(0));
        cinta = rand() %100 +1;
        benci = rand() %100 +1;
        hasil = cinta + benci;
        printf ("selamat \n");
    } else { 
        hasil = 0.0;
    }
   printf("Your love is at %f percent", hasil);
   return 0;
}

#包括
#包括
#包括
#包括
浮心;
浮床;
浮子哈西尔;
查·纳马[100];
char-pacar[100];
查塔尼亚;
int main(){
printf(“您好,我是中国游戏玩家!\n”);
printf(“siapanamaanda?”);
scanf(“%s\n”,nama);
printf(“siapanamapacaranda?”);
scanf(“%s\n”,pacar);
printf(“在卡尔库拉西的和平协议?”);
scanf(“%c\n”,tanya);//这是一行
if((tanya='y')| |(tanya==''y')){
srand(时间(0));
cinta=rand()%100+1;
benci=rand()%100+1;
hasil=cinta+benci;
printf(“selamat\n”);
}否则{
hasil=0.0;
}
printf(“你的爱是%f%”,hasil);
返回0;
}
1)

此处'\n'忽略输入,即'\n',因此可以从所有扫描中删除'\n'

(二)

这里您必须通过引用传递,而不是

       scanf ("%c",&tanya);
但在上述情况下,您不需要这样做,因为

       name==&nama[0]
       pacar==&pacar[0]
编辑:

如果您的代码不要求字符输入,则可以通过在scanf()之前添加此while循环来刷新输入缓冲区


scanf(“%c\n”,tanya);//这是一行
==>
scanf(“%c”&tanya)在编译器上激活警告:使用
gcc-Wall
,您将得到:
警告:格式“%c”要求参数类型为“char*”,但参数2的类型为“int”[-Wformat=]scanf(“%c\n”,tanya);//这是一条线< /代码> Frank Filler,既然你已经显示了这个问题,你自己是否认为这是一个简单的键入,或者你需要解释为什么这导致了观察到的错误行为?一些阅读需要被共享:留下尾随空白空间从<代码> SCANFF()/<代码>格式字符串(空白,标签和换行符)。通常,如果需要单字符输入,应在转换规范之前使用带空格的
%c”
;这将跳过先前输入留下的空白(如换行符)。大多数转换自动跳过空白。三个不使用-
%c
%[…]
(扫描集)和
%n
。或者只使用
scanf(“%c”、&tanya)
       scanf ("%c",&tanya);
       name==&nama[0]
       pacar==&pacar[0]
while ((c = getchar()) != '\n' && c != EOF);
scanf ("%c",&tanya);