如何处理此异常

时间:2014-03-23 04:30:09

标签: c++ c exception

我正在编写此代码以允许用户玩游戏“猜数字”。一旦用户猜出正确的号码,它就询问用户他/她是否想再玩一次。此代码适用于两个播放,如果用户输入'y'以便第三次播放,则代码显示异常。异常详细信息为:“Ex 5.32中0xFEFEFEFE处的未处理异常猜测number.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 1000\nCan 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;}
}

1 个答案:

答案 0 :(得分:1)

让您的scanf_s使用正确的格式规范:

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

而不是:

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

如果您使用标准scanf()使用错误的格式字符串可能会导致未定义的行为...对于scanf_s()而言不是正面的,但它不会很好。

另请注意,scanf_s()要求使用字符或字符串输入传递大小(因此1参数后面的YesOrNo

  

与scanf和wscanf不同, scanf_s 和wscanf_s 要求为c,C, s,S或字符串控件集的所有输入参数指定缓冲区大小包含在[]中的。字符的缓冲区大小作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。

另外......你用C和C ++标记了这一点,请注意C允许你从while C++ does not内部调用main()。虽然,坦白说IMO从来没有一个很好的理由这样做,但我认为你的计划没有充分的理由。