如何处理此异常

How to handle this exception

本文关键字:异常 处理 何处理      更新时间:2023-10-16

我正在编写这段代码,允许用户玩游戏"猜数字"。一旦用户猜对了数字,它就会询问用户是否想再玩一次。此代码适用于两次播放,如果用户输入'y'再次播放第三次,则代码显示异常。异常细节是:"ex5.32中0xFEFEFEFE未处理的异常:猜测数字。exe: 0xC00001A5:检测到一个无效的异常处理程序例程(参数:0x00000003)。"

 #include "stdafx.h"
 #include <math.h>
 #include <stdlib.h>
int a = 1;
int main(int g){
int num, guess;
char YesOrNo;
srand(g);
num = 1 + rand() % 1000;
printf("I have a number between 1 and 1000nCan you gess my number?n");
do{
    scanf_s("%d", &guess);
    if (guess == num){
        printf("Excellent! You guessed the number!n");
        break;
    }
    else if (guess < num)
        printf("Too low. Try Again.n");
    else
        printf("Too High. Try Again.n");
} while (1);
printf("Would you like to play again(y or n) ? ");
scanf_s("%s", &YesOrNo);
if (YesOrNo == 'Y' || 'y'){
    a++;
main(a);
  }
    else{
   return 0;}
}

让您的scanf_s使用正确的格式说明:

scanf_s(" %c", &YesOrNo, 1);   // expecting a char

代替:

scanf_s("%s", &YesOrNo);  // expecting a string

如果你使用标准的scanf()使用错误的格式字符串可能导致未定义的行为…对scanf_s()不是积极的,但它不可能是好的

还请注意,scanf_s()需要通过字符或字符串输入传递大小(因此1YesOrNo参数之后):

与scanf和wscanf不同,scanf_s和wscanf_s 要求为c、c、 s、s类型的所有输入参数或包含在[]中的字符串控制集指定缓冲区大小。以字符为单位的缓冲区大小是,作为紧跟着指向缓冲区或变量的指针的附加参数传递。

也……你用C和c++标记了这个,注意C允许你从自身内部调用main(),而c++不允许。虽然,坦率地说,在我看来,这样做从来没有一个好的理由,我也不认为你的程序有什么好的理由。