Я потерялся здесь. Какова цель? Чтобы взять строку и сделать ее целочисленной? Или преобразовать символ в 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&R я получаю сообщение об ошибке, что левый операнд оператора if должен быть I-значением. Я скопировал это слово в слово из книги. Что я сделал не так?
#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;
}
atoi()
для преобразования "ASCII в целое число"; он принимает строку, содержащую целое число, и возвращает результат или 0, если нет ничего конвертируемого. - person Jonathan Leffler   schedule 27.12.2014if (s[i] == '+' || s[i] = '-')
выполняет задание во 2-й половине. Это означает, что предупреждения вашего компилятора не полностью включены или у вас слабый компилятор. Предложите включить все предупреждения или изменить компиляторы. - person chux - Reinstate Monica   schedule 27.12.2014