我在这里迷路了。目的是什么?把一个字符串变成int?或者将字符转换成ASCII?如果对char s[]使用任何数字,则返回该数字。如果我用任何字母,我都会得到0。输出是否正确?如何测试返回类型以知道转换已发生?

//atoi: convert s to integer

#include <stdio.h>
#include <string.h>

int atoi(char s[])
{
    int i, n;

    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
        n = 10 * n + (s[i] - '0');
    return n;
}
int main()
{
    char s[] = "7";
    printf("atoi = %d\n", atoi(s)); //atoi = 7...is this correct?
    return 0;
}

在K&Rs的第二个版本中,我得到一个错误,if语句的左操作数必须是I-value。我把这本书逐字逐句地抄了下来。我做错了什么?
#include <ctype.h>
#include <stdio.h>
//atoi: convert s to integer; version 2

int atoi(char s[])
{
    int i, n, sign;

    for (i = 0; isspace(s[i]); i++) //skip white space
        ;
    sign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] = '-') //skip sign
        i++;
    for (n = 0; isdigit(s[i]); i++)
        n = 10 * n + (s[i] - '0');
    return sign * n;
}
int main()
{
    char s[] = "9";
    printf("atoi = %d\m", atoi(s));
    return 0;
}

最佳答案

显然,你没有“逐字逐句地从书上抄下来”。
您在if语句中使用的是赋值,而不是比较。
更改此:

s[i] = '-'

对此:
s[i] == '-'

关于c - 沮丧中的阿托伊,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27665307/

10-10 17:34