我已经进入CS50了3周,花了整整一天的时间让atoi上班。编译以下代码时出现以下错误。
我的问题是:
非常感谢社区。我渴望成为一名优秀的程序员。
========== caesar.c:22:30:错误:指针转换不兼容的整数,将'char'传递给'const char *'类型的参数;拿 地址为&[-Werror,-Wint-conversion] int a = atoi(argv [1] [i]); ^ ~~~~~~~~~
int main(int argc, string argv[])
{
//if not exactly 1 argument, print error message a value of 1
if (argc == 2)
{
for (int i = 0; i < strlen(argv[1]); i++)
{
if (!isdigit(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
else
{
int a = atoi(argv[1][i]);
printf("%i\n",a);
}
}
}
else
{
printf("Usage: ./caesar key\n");
}
答案 0 :(得分:0)
简单使用int a = argv[1][i] - '0'
说明:我们考虑ASCII码中的单个字符,它是介于0到255之间的数字。“ 0”,“ 1” ...“ 9”按其值的相同顺序偶然/有意地排列。在这种情况下,我们通过减去ASCII数字“ 0”来获得数字字符的值
答案 1 :(得分:0)
我建议使用循环检查字符串的每个数字,然后使用一次调用atoi
将字符串转换为数字:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
//if not exactly 1 argument, print error message a value of 1
if (argc == 2)
{
for (int i = 0; i < strlen(argv[1]); i++)
{
if (!isdigit(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
}
int a = atoi(argv[1]);
printf("%i\n", a);
}
else
printf("Usage: ./caesar key\n");
}
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
bool check_valid (string s)
{
for (int i = 0; i < strlen(s); i++)
{
if (isalpha(s[i]))
return false;
}
return true;
}
int main (int argc, string argv[])
{
if (argc != 2 || !check_valid(argv[1]))
{
printf("Usage: ./caesar key\n");
return 1;
}
}
`