[英]C Program Crashing, not sure why?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <ctype.h>
int main () {
int dice1; //declaring variables
int dice2;
int dice3;
int dice4;
int dice5;
int rolls = 0;
int diceRolls = 0;
bool reroll1 = false;
bool reroll2 = false;
bool reroll3 = false;
bool reroll4 = false;
bool reroll5 = false;
char confirm1; //no arrays, as mentioned in the rubric :) ...
char confirm2;
char confirm3;
char confirm4;
char confirm5;
srand(time(0)); //seeding
printf("DICE 1\t"); //formatting so the users know which dice is which for later
printf("DICE 2\t");
printf("DICE 3\t");
printf("DICE 4\t");
printf("DICE 5\n");
dice1 = rand() % 6 + 1;
printf("%d\t", dice1);
dice2 = rand() % 6 + 1;
printf("%d\t", dice2);
dice3 = rand() % 6 + 1;
printf("%d\t", dice3);
dice4 = rand() % 6 + 1;
printf("%d\t", dice4);
dice5 = rand() % 6 + 1;
printf("%d\t\n", dice5);
while ((dice1 != dice2) || (dice2 != dice3) || (dice3 != dice4) || (dice4 != dice5)) { //The loop determines that if Yahtzee is not achieved, it will reroll until it is
rolls ++;
printf("Reroll die 1?(y/n)\n");
scanf("%c", confirm1);
if (tolower(confirm1) == 'y') {
reroll1 = true;
dice1 = rand() % 6 + 1;
}
printf("Reroll die 2?(y/n)\n");
scanf("%c", confirm2);
if (tolower(confirm2) == 'y') {
reroll2 = true;
dice2 = rand() % 6 + 1;
}
printf("Reroll die 3?(y/n)\n");
scanf("%c", confirm3);
if (tolower(confirm3) == 'y') {
reroll3 = true;
dice3 = rand() % 6 + 1;
}
printf("Reroll die 4?(y/n)\n");
scanf("%c", confirm4);
if (tolower(confirm4) == 'y') {
reroll4 = true;
dice4 = rand() % 6 + 1;
}
printf("Reroll die 5?(y/n)\n");
scanf("%c", confirm5);
if (tolower(confirm5) == 'y') {
reroll5 = true;
dice5 = rand() % 6 + 1;
}
if (reroll1) {
printf("%d\t", dice1);
}
if (reroll2) {
printf("%d\t", dice2);
}
if (reroll3) {
printf("%d\t", dice3);
}
if (reroll4) {
printf("%d\t", dice4);
}
if (reroll5) {
printf("%d\t\n", dice5);
}
}
system("cls"); //clear screen for a better look
diceRolls = rolls * 5; //calculating dice rolls
printf("STATS\n"); //shows user stats
printf("Amount of rolls to achieve Yahtzee!: %d\n", rolls);
printf("Number of dice rolled: %d", diceRolls);
return 0;
}
Sorry about the indenting first of all. 首先抱歉缩进。 It is not so neat. 它不是那么整洁。 This program generates "rolls" 5 die, and tries to get a Yahtzee. 该程序会生成5个“骰子”,并尝试获得Yahtzee。 The user then is given the option to decide what to reroll. 然后,用户可以选择要重新滚动的内容。 No arrays are allowed in this program, or functions. 此程序或函数中不允许使用数组。 Now, on to the question. 现在,开始讨论这个问题。 I am having a problem with my code as the program just crashes the first time I try to enter something, which is right after the while loop. 我的代码有问题,因为程序在我第一次尝试输入内容时就崩溃了,这是在while循环之后。 When I tried to debug, it seems like scanf is the issue here, but I'm not sure what to change to let the code function, and am not sure what I am doing wrong in the code, since I've been learning C at school for close to a month now. 当我尝试调试时,这似乎是scanf的问题,但是我不确定要更改哪些内容以使代码起作用,也不确定我在代码中做错了什么,因为我一直在学习C现在在学校待了近一个月。
Thank you, 谢谢,
Kai 凯
scanf
takes the address of the variable to write user input to the variable. scanf
使用变量的地址将用户输入写入变量。 You are only passing the variable name (value) and not the address. 您仅传递变量名称(值),而不传递地址。 &
is the operator, which when prefixed to the variable name, gives address of that variable. &
是运算符,该运算符以变量名为前缀,给出该变量的地址。
So correct way of using scanf
is as below and this would solve your problem. 因此,使用scanf
正确方法如下所示,这可以解决您的问题。 Use the same for other scanf
statements in your program. 对程序中的其他scanf
语句使用相同的命令。
scanf("%c", &confirm1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.