C++ Visual Studio:调试断言失败!表达式:c >= -1 && c <= 255
Posted
技术标签:
【中文标题】C++ Visual Studio:调试断言失败!表达式:c >= -1 && c <= 255【英文标题】:C++ Visual Studio : Debug Assertion Failed! Expression: c >= -1 && c <= 255 【发布时间】:2017-10-09 17:13:03 【问题描述】:我正在尝试做一个基本的 C++ 分数/等级系统。我想验证用户输入。如果数据不是数字,我希望它显示错误消息。如果是,我希望它继续下去。
但是,如果用户输入一个字母,例如“a”或“A”。它吐出这个错误:
Debug Assertion Failed!
Program:
...ers\Alex\source\repos\worksheet_1.2a\Debug\worksheet_1.2a.exe
File: minkernel\crts\ucrt\appcrt\convert\isctype.cpp
Line: 36
Expression: c >= -1 && c <= 255
这是代码:
#include "stdafx.h"
#include <iostream>
#include <cctype>
using namespace std;
int main()
int score;
// Recieve user input of score between 0-100. Stores input in score var
cout << "\nWhat score did you get?\n" << endl;
cin >> score;
// Validating input
if (!isdigit(score))
if (score <= 59)
cout << "Your grade is F" << endl;
else if (score > 59 && score < 70)
cout << "Your grade is D" << endl;
else if (score > 69 && score < 80)
cout << "Your grade is C" << endl;
else if (score > 79 && score < 90)
cout << "Your grade is B" << endl;
else if (score > 89)
cout << "Your grade is A" << endl;
else
cout << "Sorry, that is not a number. Please try again." << endl;
return 0;
如果输入数字,它可以正常工作,但如果输入字母,则根本不行。
我查看了基于“调试断言失败”的其他几个答案和视频,但找不到针对此特定错误的答案和视频。
感谢您的阅读和帮助!
【问题讨论】:
在调试器中运行时,输入字母时score
有什么值?你可能需要char score;
而不是int score;
。
【参考方案1】:
isdigit
采用int
而不是char
是相当奇怪的,因为这就是它的用途(来自here,强调我的):
检查给定的 字符 是否是 10 个十进制数字之一: 0123456789.
如果 ch 的值不能表示为,则行为未定义 unsigned char 且不等于 EOF。
似乎isdigit
是一个相当大的陷阱,你很幸运被断言解雇了。无论如何,即使它需要一个int
,你也应该传递一个char
:
std::string s = "12asbc";
std::cout << isdigit(s[0]); // prints 1
std::cout << isdigit(s[3]); // prints 0
不管怎样,你的支票没什么意义。如果它按您的预期工作,您只会知道该数字不是一个数字,但如果用户输入 abcd
或任何不是数字的东西,您的代码仍然会失败。要检查输入是否正确,您可以这样做
int score;
if (std::cin >> score && 0 <= score && score <= 100)
// ok input
else
// invalid input
【讨论】:
我试过这个。如果用户输入一个字符,它会给出错误。但是现在,如果用户给出一个数字,它什么也不做。当按下“Enter”时光标会跳到下一行并停留在那里并闪烁?【参考方案2】:你为什么输入!isdigit(score)
而不是isdigit(score)
?
不要将!
放在isdigit(score)
前面。
当参数为数字时,isdigit()
返回 True
。
【讨论】:
以上是关于C++ Visual Studio:调试断言失败!表达式:c >= -1 && c <= 255的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2017 中禁用作为调试错误的失败断言?
Visual Studio 2017 - 断言失败没有提示?
如何禁用调试断言对话框 Visual Studio 或输出 exe
在 Visual C++ 2005 中开发的 Visual C++ 项目 - 在 Visual C++ 2010 中,打开菜单时调试断言失败,但发布模式有效,如何解决?