调用 Parse int 函数时编译 parse 整数程序时出现问题
trouble compiling a parse integer program when calling the parse int function
目前,我在实现我制作的解析整数程序时遇到了一些问题。在程序中调用函数时,我在函数下出现两条黄线
using namespace std;
char parseInt(char userInput[40], char& integers);
int main()
{
char userInput[40];
char integers[40];
cout << "After you enter string input, the program will parse all the integers "
<< "inside the string and display them. n Enter a string: n";
cin.ignore();
cin.getline(userInput, 40);
parseInt(userInput, integers); //Here lies the problem
cout << "The integers inside the string you entered were: n" << integers;
return 0;
}
char parseInt(char userInput[40], char& integers)
{
int j = 0;
for(int i = 0; i<sizeof(userInput); i++)
{
if( userInput[i] == 1 || userInput[i] == 2 || userInput[i] == 3 ||
userInput[i] == 4 || userInput[i] == 5 || userInput[i] == 6 ||
userInput[i] == 7 || userInput[i] == 8 || userInput[i] == 9 ||
userInput[i] == 0 )
{
integers = userInput[i];
j++;
}
}
}
调用解析 Int 函数时,我收到的两条错误消息是: - 无法将右值 (char( (char*( (&integers( 绑定到"(char&(" - 从"char*"到字符的转换无效 [-允许]
我只是很难准确理解错误代码试图表达的内容,我试图更多地理解它们。
这里有很多错误。
-
sizeof(userInput)
不像您期望的那样工作(user4581301 在评论中提到了这一点(。userInput
是参数,并且由于参数类型调整。函数的类型使用以下规则确定。每个参数(包括函数参数包(的类型由其自己的decl-specifier-seq和声明符确定。确定每个参数的类型后,任何类型为"
T
数组">或函数类型为T
的参数都将调整为"指向T
的指针"。生成参数类型列表后,在形成函数类型时,将删除任何修改参数类型的顶级cv 限定符。结果,您的循环最多只能达到
sizeof (char*)
. -
您正在读取字符串,但检查每个字符的数值。 不要指望
'1' == 1
,在任何常用的字符编码上都不是真的。(EloyBG提到了这个( -
您将
integers
声明为仅对一个整数的引用,但尝试传递整个数组。(伊兰提到过这个( -
您正在尝试将许多值填充到对一个整数的引用中。 (EloyBG也提到了这一点,但他的修复具有误导性,原因与#1相同(
-
到达非
void
函数的末尾是非法的,您必须返回一个值或异常离开(user4581301 也提到了这一点(
修复它的 C 方法是将数组的长度作为单独的参数传递。 在C++中,您可以使用对数组的引用来强制实施固定长度,甚至推断实际长度:
void parseInt(char (&userInput)[40], char (&integers)[40])
参数调整仅更改数组,而不更改对数组的引用,因此您的sizeof
尝试将再次起作用。
在parseInt中,整数像单个字符一样声明,但你传递的是一个数组。此外,您将用户输入作为整数而不是 ASCII 进行比较。
void parseInt(char userInput[40], char integers[40])
{
int j = 0;
for(int i = 0; i<sizeof(userInput); i++)
{
if( userInput[i] == '1' || userInput[i] == '2' || userInput[i] == '3' ||
userInput[i] == '4' || userInput[i] == '5' || userInput[i] == '6' ||
userInput[i] == '7' || userInput[i] == '8' || userInput[i] == '9' ||
userInput[i] == '0' )
{
integers[j] = userInput[i];
j++;
}
}
}
如果您使用代码,
它通过引用返回单个字符,但不返回字符链。
char parseInt(char userInput[40], char& integers)
{
int j = 0;
for(int i = 0; i<sizeof(userInput); i++)
{
在这里,您将用户输入与 ASCII 表的第一个元素进行比较。
if( userInput[i] == 1 || userInput[i] == 2 || userInput[i] == 3 ||
userInput[i] == 4 || userInput[i] == 5 || userInput[i] == 6 ||
userInput[i] == 7 || userInput[i] == 8 || userInput[i] == 9 ||
userInput[i] == 0 )
{
在下一行中,您更改了单个字符的值,但没有添加新字符,因为它不是数组(我假设您知道是因为您声明了 j(
integers = userInput[i];
j++;
}
}
}
总的来说,
cin.ignore()
是不必要的,它使你失去了链的第一个字符。
- 像字符数组一样声明整数
- 将用户输入作为 ASCII 而不是整数进行比较(您可以将其比较为整数,但您必须使用与 ASCII 表上的字符对应的整数(
- 删除 cin.ignore(( 行
你正在将 char 整数 [40] 传递到一个函数中,它的第二个参数需要通过引用传递 char。
将字符更改为字符[40]
char parseInt(char userInput[40], char integers[40])
- C++程序问题:抛出'std::invalid_argument'实例后终止调用
- 测试外壳,插入和快速的程序问题
- Mongodb c ++驱动程序问题
- 输出中的特定递归反向程序问题
- C++ std::endl 的多线程程序 I/O 问题
- 我如何利用核心文件在C/C 中找到应用程序问题
- 套接字 TCP 服务器程序问题
- C++,结构数据库程序问题
- visual c++程序问题
- C++多个程序问题(rand、转换、崩溃)
- 非常基本的C++程序问题 - 二进制表达式的操作数无效
- C++练习车辆程序问题 - 初学者编程
- 关于堆和堆栈应用程序问题
- Boost asio:io服务在销毁步骤中被阻止了更多的处理程序问题
- 使用链接linux编译GLFW应用程序问题
- C++计算器程序.问题
- 基于WIndows - manifest的ETW提供程序问题
- 求1到100之间质数的程序问题
- 文件加载程序问题
- mfcc++托盘应用程序问题