CS50撒我怎么atoi?
CS50 Caesar how do I atoi?
我进入 CS50 已经 3 周了,我花了一整天的时间试图让 atoi 开始工作。编译以下代码时出现以下错误。
我的问题是:
- 如何在 atoi() 函数中表示每个字符?
- 如何只打印一次结果? (当我将 atoi 更改为 argv[1] 时,循环使它打印 argv 的次数)
在此先感谢社区。我渴望成为一名优秀的程序员。
=========
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");
}
简单使用int a = argv[1][i] - '0'
解释:我们考虑ASCII码中的单个字符,它是0到255之间的数字。'0''1'...'9'coincidentally/intentionally按照它们的相同顺序排列价值。在这种情况下,我们通过减去 '0'
的 ASCII 码得到数字字符的值
我建议使用循环来检查字符串的每个数字,然后使用对 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");
}
#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;
}
}
`
我进入 CS50 已经 3 周了,我花了一整天的时间试图让 atoi 开始工作。编译以下代码时出现以下错误。
我的问题是:
- 如何在 atoi() 函数中表示每个字符?
- 如何只打印一次结果? (当我将 atoi 更改为 argv[1] 时,循环使它打印 argv 的次数)
在此先感谢社区。我渴望成为一名优秀的程序员。
========= 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");
}
简单使用int a = argv[1][i] - '0'
解释:我们考虑ASCII码中的单个字符,它是0到255之间的数字。'0''1'...'9'coincidentally/intentionally按照它们的相同顺序排列价值。在这种情况下,我们通过减去 '0'
的 ASCII 码得到数字字符的值我建议使用循环来检查字符串的每个数字,然后使用对 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");
}
#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;
}
}
`