我想动态填充char数组并检查包含的值是否是有效整数,这是我到目前为止所得到的:
for(int i = 0; i < 50000; i++)
{
if(input[i] == ',')
{
commaIndex = i;
}
}
commaIndex是文件中逗号的索引,应该在逗号之前输入数值,文件如下所示:-44,5,19,-3,13,(etc),这对于此部分很重要:
char *tempNumber = new char[commaIndex];
填充tempNumber(可能与我的动态分配一样大,因此我没有一个50000字符数组(命名输入)的数字。
for(int i = 0; i < commaIndex; i++)
{
cout << i << "\n";
tempNumber[i] = input[i];
}
现在我想用它:
if(!isValidInteger(tempNumber))
{
cout << "ERROR!\n";
}
不幸的是,无论“commaIndex”的值如何,tempNumber似乎总是大小为4,即我得到以下输出:
(输入数据:50000,3,-4)
commaIndex:5 tempNumber的内容:5000(一个0缺失)
逗号索引:1 tempNumber的内容:3²²²(注意3 ^ 2s)
commaIndex:2 tempNumber的含量:-4²²
有什么想法吗?
还有一件事:这是一个家庭作业,我不允许使用任何面向对象的C ++元素(这包括字符串和向量,我一直在那里,我知道它会 SO < / em> easy。)
谢谢,
丹尼斯
答案 0 :(得分:1)
您可能对strtol函数感兴趣。
答案 1 :(得分:1)
您也可以考虑将strtok()
与sscanf()
一起使用。请注意,strtol()
不允许您检查错误,因为它只是在解析错误时返回(完全有效)值0
。另一方面,sscanf()
返回成功读取项目的数量,因此您可以在阅读数字时轻松检查是否有错误。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i = 0;
char str[] = "1,2,-3,+4,a6,6";
/* calculate result table size and alloc */
int max = 1;
char* tmp = str;
while (*tmp)
if (*tmp++ == ',')
++max;
int* nums = malloc(sizeof(int) * max);
/* tokenize string by , and extract numbers */
char* pch = strtok(str, ",");
while (pch != NULL) {
if (sscanf(pch, "%d", &nums[i++]) == 0)
printf("Not a number: %s\n", pch);
pch = strtok(NULL, ",");
}
/* print read numbers */
for (i = 0; i < max; ++i)
printf("%d\n", nums[i]);
free(nums);
return 0;
}