C++基本变量识别
C++ Basic Variable Identification
所以我正在尝试自己学习C++,但我似乎无法解决程序中的这个特定错误。这是我迄今为止所拥有的。在某些方面,一切似乎都很顺利;我让用户通过我设置的提示输入他们的变量,但对我来说很棘手的是确定他们使用的是哪种整数。正如你所看到的,我为每种int类型(有符号的、无符号的、长的、短的)组合了一些比较字节大小和max/min的条件,但每当我运行程序时,即使我不使用整数或一些奇怪的数字,它应该很容易显示为长,我的返回总是一个该死的有符号的int。有人能就我下一步应该采取的措施给我一些建议吗?我似乎也无法触发我的错误消息,该消息应该在命令提示符中没有输入数字时显示。现在想解决这个问题,我所要做的就是放入一个由禁止的符号/字母组成的数组列表,这将触发错误,对吧?
/*********************************************************************
** Program Filename: int.cpp
** Description: Checks int type and prints various other details
** Input: int
** Output: metadata
*********************************************************************/
#include <iostream>
#include <climits> // redundant, included in iostream
#include <typeinfo>
#include <string>
#include <sstream>
#include <limits>
#include <stdint.h>
#include <cstdio>
using namespace std;
/* define global variables */
int myNumber;
string dataType= "";
/*********************************************************************
** Function: Prompt
** Description: Prompts user for value
** Return: Void
*********************************************************************/
void prompt()
{
/* define local variables*/
string input = "";
/* ask for value until valid value is entered, else show error message */
while (true) {
/* Pronmpt user */
cout << "Please enter an integer: ";
/* get user input */
getline(cin, input);
/* add user input value to string buffer */
stringstream streamNum(input);
/* check to see if user entered a valid value */
if (streamNum >> myNumber)
cout << endl;
break;
/* error message if not int */
cout << "ERROR: Invalid integer, please try again" << endl;
}
}
/*********************************************************************
** Function: Get int type
** Description: conditionals to assign data type. using online docs for bit length
** Return: Void
*********************************************************************/
void typeID()
{
if ( sizeof(myNumber) == 4 )
{
dataType = "signed";
} else if ( sizeof(myNumber) == 4 && myNumber >= 0 )
{
dataType = "unsigned";
} else if ( sizeof(myNumber) == 4 && myNumber >> -2147483647 && myNumber << 2147483647 )
{
dataType = "long";
}else if ( sizeof(myNumber) == 2 && myNumber >> -32768 && myNumber << 32767 )
{
dataType = "short";
}else
cout << "You did not enter a valid integer. Try again soon! "<< numeric_limits<int>::min();
}
/*********************************************************************
** Function: limits
** Description: check max and min of various int types
** Return: Void
*********************************************************************/
void limits()
{
if ( dataType == "signed" )
{
cout << "Maximum Signed Int Value: " << INT_MAX << endl;
cout << "Minimum Signed Int Value: " << INT_MIN << endl;
}else if ( dataType == "unsigned" )
{
cout << "Maximum Unsigned Int Value: " << UINT_MAX << endl;
cout << "Minimum Unsigned Int Value: " << 0 << endl;
} else if ( dataType == "long" )
{
cout << "Maximum Long Int Value: " << LONG_MIN << endl;
cout << "Minimum Long Int Value: " << LONG_MAX << endl;
}else if ( dataType == "short" )
{
cout << "Maximum Short Int Value: " << SHRT_MAX << endl;
cout << "Minimum Short Int Value: " << SHRT_MIN << endl;
}
}
/*********************************************************************
** Function: int info
** Description: prints info of user variable
** Return: Void
*********************************************************************/
void info()
{
/* print details */
cout << "You entered: " << myNumber << endl;
cout << "Integer type: " << dataType << endl; /* demangles and prints type operator of user entered int */
}
/*********************************************************************
** Function: main function
** Description: runs program
*********************************************************************/
int main()
{
prompt();
typeID();
info();
limits();
return 0;
}
变量的类型在编译时由编译器在分析您如何声明变量时确定(因此它不会改变,与您输入到程序中的值无关)。您已经将myNumber
声明为int myNumber
,所以它是signed int myNumber;
(C++语言以这种方式指定它,没有办法使它不同),这意味着它只能存储有符号的数字。如果您尝试将其声明为unsigned
或unsigned int
,则它将只包含个无符号值。如果你试图读取一个unsigned
变量并输入一个负值,就会出现问题,因为结果是未定义的(根据定义,即使听起来像讽刺:)
相关文章:
- 家庭作业问题 - C++更新已识别的变量
- 如何修复 Typedef 变量未识别错误 C++ (Visual Studio 2017)
- 识别矩阵变量分配的行为
- 为什么我的程序无法识别结构中的变量?
- 在无法识别的条件中初始化的局部变量
- Visual Studio environmant 变量未被 C++ stdlib getenv 识别
- While 循环的变量未被识别为已初始化
- C++基本变量识别
- 声明cudaError_t变量时出现无法识别的令牌错误
- 如何在不运行的情况下识别LUA脚本中的非初始化变量
- 您如何使用字符串或字符在C 中识别名称识别变量
- 是否有一种方法可以在运行时识别变量的const修饰符
- 识别给定函数中的不同变量
- 如何识别变量的类型
- 除了更改环境变量"PATH"之外,您还需要做什么才能让 Eclipse 识别 MinGW?
- 有人可以指出为什么我的变量无法识别以及为什么我不能重载我的运算符吗
- 识别和执行变量
- 在Mac OSX Yosemite上,编译器无法识别父类成员变量(Apple LLVM 7.0)
- 视觉C++无法识别 OpenCV 变量
- 混合 C/C++ 源,无法识别链接上的"外部"变量