C 尝试运行老虎机程序时随机出现错误代码
我正在为一台基本的老虎机编写一个程序,随机生成数字,并从数组中显示相应的“符号”。程序大部分时间都在执行,但我随机得到一个错误代码-1073741819(0xC0000005)。我对C非常陌生,所以我对很多事情都不熟悉,包括我的代码中到底是什么导致了这个错误C 尝试运行老虎机程序时随机出现错误代码,c,C,我正在为一台基本的老虎机编写一个程序,随机生成数字,并从数组中显示相应的“符号”。程序大部分时间都在执行,但我随机得到一个错误代码-1073741819(0xC0000005)。我对C非常陌生,所以我对很多事情都不熟悉,包括我的代码中到底是什么导致了这个错误 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); ch
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
char *symbols[] = {"Pineapple", "Kiwi", "Orange", "Lime", "Peach",
"Lemon", "Pear", "Banana", "Cherry", "Grape", "Blueberry",
"Blackberry", "Apricot"};
int num1, num2, num3;
int balance;
printf("Enter initial balance (in cents): ");
scanf("%d", &balance);
num1 = (rand() % (13 - 0 + 1)) + 0;
num2 = (rand() % (13 - 0 + 1)) + 0;
num3 = (rand() % (13 - 0 + 1)) + 0;
printf("%s ", symbols[num1]);
printf("%s ", symbols[num2]);
printf("%s ", symbols[num3]);
printf("\n");
if ((num1 == num2) && (num1 == num3))
{
printf("Congratulations! You have won $1");
balance += 100;
printf("\n");
}
balance -= 5;
printf("Remaining Balance: %d", balance);
return 0;
}
#包括
#包括
#包括
int main()
{
srand(时间(空));
字符*符号[]={“菠萝”、“猕猴桃”、“橙子”、“酸橙”、“桃子”,
“柠檬”、“梨”、“香蕉”、“樱桃”、“葡萄”、“蓝莓”,
“黑莓”、“杏”};
int num1,num2,num3;
国际收支平衡;
printf(“输入初始余额(以美分为单位):”;
scanf(“%d”和余额);
num1=(rand()%(13-0+1))+0;
num2=(rand()%(13-0+1))+0;
num3=(rand()%(13-0+1))+0;
printf(“%s”,符号[num1]);
printf(“%s”,符号[num2]);
printf(“%s”,符号[num3]);
printf(“\n”);
如果((num1==num2)和&(num1==num3))
{
printf(“祝贺你!你赢了1美元”);
余额+=100;
printf(“\n”);
}
余额-=5;
printf(“剩余余额:%d”,余额);
返回0;
}
我所说的错误是随机发生的,我无法可靠地重现它。有时只打印1/3个水果名,我得到错误代码,有时是2个,有时没有打印。语句(rand()%(13-0+1))+0
相当于rand()%14
,它将生成0-13(含0-13)之间的随机数。问题是您只有13个字符串,因此当rng抛出一个13
时,索引13
处的结果不存在
这可以通过添加另一个水果或将您的rng更改为rand()%13
语句(rand()%(13-0+1))+0来解决
相当于rand()%14
,它将生成0-13(含0-13)之间的随机数。问题是您只有13个字符串,因此当rng抛出一个13
时,索引13
处的结果不存在
这可以通过添加其他水果或将rng更改为rand()%13
来解决:
num1 = (rand() % (13 - 0 + 1)) + 0;
同:
num1 = rand() % 14;
这意味着你正在生成一个从0到13的数字。您的符号
数组有13个元素,索引范围为0到12。因此,当您随机生成值13时,您读取的数据超过了数组的末尾。这样做会调用[undefined behavior]9https://en.wikipedia.org/wiki/Undefined_behavior),在这种情况下会导致程序崩溃
将该行和后面的两行更改为:
num1 = (rand() % 13;
num2 = (rand() % 13;
num3 = (rand() % 13;
这样你就可以得到一个从0到12的数字。这个:
num1 = (rand() % (13 - 0 + 1)) + 0;
同:
num1 = rand() % 14;
这意味着你正在生成一个从0到13的数字。您的符号
数组有13个元素,索引范围为0到12。因此,当您随机生成值13时,您读取的数据超过了数组的末尾。这样做会调用[undefined behavior]9https://en.wikipedia.org/wiki/Undefined_behavior),在这种情况下会导致程序崩溃
将该行和后面的两行更改为:
num1 = (rand() % 13;
num2 = (rand() % 13;
num3 = (rand() % 13;
这样您就得到了一个从0到12的数字。您正在随机访问
符号
数组的无效第14个元素(包含13个元素)
当你写作时
num1 = (rand() % (13 - 0 + 1)) + 0;
您正在尝试计算符号索引。但这可能导致指数13。。。而且符号[13]
不存在,它将在访问不应该访问的内存位置时转换
简写
num1 = rand() % 13;
一切都会好起来。您正在随机访问
符号
数组(包含13个元素)的无效第14个元素
当你写作时
num1 = (rand() % (13 - 0 + 1)) + 0;
您正在尝试计算符号索引。但这可能导致指数13。。。而且符号[13]
不存在,它将在访问不应该访问的内存位置时转换
简写
num1 = rand() % 13;
一切都会好起来。为什么模数14(13-0+1)在符号中只有13个条目
?为什么模数14(13-0+1)在符号中只有13个条目
?