将argv参数转换为int
Converting argv arguments to int
我试过atoi, stroll和stoi,但它们都不适合我。我甚至试图从我听说应该工作的char中减去'0',但这也抛出了一个错误。atoi给了我一个分段错误,strol不能编译,stoi给了我一个std逻辑错误。以下是我到目前为止的全部程序:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
bool isPrime(int);
int main (int argc, char *argv[])
{
const int size = 199;
int counter = 1;
int primeAry[size];
for (int i = 0; i < size; i++) // creates an array of prime numbers
{
if (isPrime(i))
{
primeAry[counter] = i;
counter++;
}
}
for (int j = 1; j <= argc; j++) // finds prime numbers by index of args and displays them
{
if (j == 1)
cout << "Last name is " << argv[j] << endl;
else
{
int temp = atoi(argv[j]);
cout << temp << " th prime number is " << primeAry[temp] << endl;
}
}
system("pause");
return 0;
}
bool isPrime(int num)
{
if(num <= 1)
return false;
else if (num <= 3)
return true;
else if (((num % 2) == 0) || (num % 3) == 0)
return false;
int i = 5;
while((i*i) <= num)
{
if ((num % i == 0) || ((num % (i + 2)) == 0))
return false;
i = i + 6;
}
return true;
}
我得到的结果是:
Last name is smith
1 th prime number is 2
2 th prime number is 3
3 th prime number is 5
Segmentation Fault
我一直在这个工作,我已经搜索了每一个论坛,我能找到,但我不能弄清楚我错过了什么。
分段错误* *
当将NULL
传递给atoi
时,会出现分段错误。这是因为你的循环边界不正确。:
for (int j = 1; j <= argc; j++)
应该改成
for (int j = 1; j < argc; j++)
在C语言中,对于所有具有<=
终止条件的循环,应持极端怀疑态度。
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度