2017-01-25 7 views
1

Я пытаюсь создать вход и выход для проверки некоторых функций в K & R и любых их модификациях. Для atoi в разделе 2.7 (без изменений, но для имени) я добавил функцию печати и образец для преобразования. Кажется, что программа работает, за исключением символьной строки (проверяемое значение) появляется как алмаз, независимо от того, что я делаю (т. Е. Независимо от символьной строки, GGGAAAZ как заданной или других записей), а затем целочисленное значение всегда равно нулю , Является ли это проблемой компилятора (и если да, исправления?) Или я что-то пропускаю?Basic C/K & R 2.7/Символ, отображаемый как алмаз, независимо от определения?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

    char s[] = "GGGAAAZ"; 
    int n; 
    n = antoi(s); 
    printf("The char was %c\n", s); 
    printf("The int is %d \n", n); 

    return 0; 
} 

/* atoi: convert s to integer; name changed to antoi because */ 
int antoi(char s[]) 
{ 
int i, n; 
n = 0; 
for (i = 0; s[i] >= '0' && s[i] <= '0'; ++i) 
n = 10 * n + (s[i] - '0'); 
return n; 
} 

Алмаз сохраняется, делаю ли я что-то вроде "GGGAAAZ" или определить с [] = 'а', 'б', 'с'

Спасибо!

+1

's [i] <= '0'' -->' s [i] <= '9''. Также 'printf (« char был% c \ n », s);' -> 'printf (« Char был% s \ n », s);' – BLUEPIXY

ответ

0

У вас есть несколько вопросов.

  1. печати строки с помощью printf следует использовать %s в качестве формата. %c предназначен для одного символа, но вы передаете указатель на массив символов.

  2. (как говорится в комментариях) s[i] >= '0' && s[i] <= '0' - это то же самое, что и у s[i] == '0'. Вы должны положить s[i] >= '0' && s[i] <= '9'

  3. Вы передаете функцию «GGGAAAZ», которая не будет преобразована ни в чем, кроме 0 кодом.