如何处理此异常
How to handle this exception
我正在编写这段代码,允许用户玩游戏"猜数字"。一旦用户猜对了数字,它就会询问用户是否想再玩一次。此代码适用于两次播放,如果用户输入'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()
需要通过字符或字符串输入传递大小(因此1
在YesOrNo
参数之后):
与scanf和wscanf不同,scanf_s和wscanf_s 要求为c、c、 s、s类型的所有输入参数或包含在[]中的字符串控制集指定缓冲区大小。以字符为单位的缓冲区大小是,作为紧跟着指向缓冲区或变量的指针的附加参数传递。
也……你用C和c++标记了这个,注意C允许你从自身内部调用main()
,而c++不允许。虽然,坦率地说,在我看来,这样做从来没有一个好的理由,我也不认为你的程序有什么好的理由。
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理
- 使用 stoi 功能进行异常处理
- 子系统中的异常处理:本机
- 与异常处理程序中的操作员<<不匹配
- 数组 C++ 上的异常处理程序
- 异常处理:如果用户输入不是三个特定字符之一
- C++ 异常处理错误输出
- 视觉 std::矢量无异常:警告 C4530:使用了C++异常处理程序,但未启用展开语义.指定 /EHsc
- C++交换机状态异常处理
- 在字符串类上的成员函数和out_of_range异常处理
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- 执行视觉工作室异常处理模式
- 为什么隐式转换在异常处理中从派生到基?
- C++执行期间的类成员函数错误/异常处理
- C++ 中未处理的异常处理程序
- 用户定义的异常处理
- C :ScopeGuard vs返回支票和异常处理
- 异常处理期间的类型解析