您的代码中有几个问题需要进行修正:
1. 在定义 shijianming 数组时,应该指定第二维的大小。例如,可以使用 char shijianming[99][100] 来定义一个有99行、每行最多99个字符(加上字符串结尾符'\0')的二维字符数组。
2. 在输入事件个数时,无需将 shijian 传递给 scanf_s 函数,直接使用 scanf_s("%d", &shijian) 即可。
3. 在输入事件名称和概率时,无需对 shijianming[i] 和 gailv[i] 进行 scanf_s,直接使用 scanf_s("%s", shijianming[i], 99) 和 scanf_s("%lf", &gailv[i]) 即可。
4. 在循环时,应该使用小于号 < 而不是小于等于号 <=,因为数组下标从0开始。
5. 在输入事件概率时,应该使用数组下标,即 gailv[i] = scanf_s("%lf", &gailv[i]) 应该改为 scanf_s("%lf", &gailv[i])。
6. 在 main 函数中,无需将 switch1 再次传递给 scanf_s 函数,直接使用 scanf_s("%d", &switch1) 即可。
以下是已经修正的代码:#include <stdio.h>double moni() { int i; int shijian; char shijianming[99][100] = {'\0'}; double gailv[99] = { 0 }; double gailvsum = 0; printf("有几个事件?\n"); scanf_s("%d", &shijian); for (;;) { for (i = 0; i < shijian; i++) { printf("输入第%d个事件是什么\n", i + 1); scanf_s("%s", shijianming[i], 99); printf("输入第%d个事件的概率\n", i + 1); scanf_s("%lf", &gailv[i]); gailvsum = gailvsum + gailv[i]; } if (gailvsum != 1) { printf("输入的概率总和不为1,请重新输入\n"); system("cls"); } else { break; } }}int main() { int switch1 = 0; printf("输入1进行模拟实验,输入2进入概率计算。\n"); scanf_s("%d", &switch1); if (switch1 == 1) { moni(); } return 0;}
希望以上修改能够帮助您解决问题,如还有疑问,请随时追问。 |