2013-10-08 2 views
0

Это супер базовый вопрос ... Я переучиваю C (не использовал его более 5 лет). Я не могу заставить этот код работать. Я пытаюсь отсканировать пользовательский ввод (символ ascii) как целое число и показать код ascii для введенного символа.C - Диаграммы сканирования и код ASCII

#include <stdio.h> 
int main(int argc, char *argv[]) { 

    int character; 

    printf("Welcome to ASCII:\n"); 

    do { 
    scanf("%d",&character); 

    printf("ascii: %d\n",character); 
    } while(character != 999); 

    printf("Done.\n"); 

    return 0; 
} 

Это просто показывает 0 для каждого входа ...

+0

работает для меня. Используйте fgets (buffer, size, stream) и sscanf(), чтобы вытащить ввод, а затем неверный ввод не повредит вам. В любом случае, какой персонаж вы входите? потому что, если вы пытаетесь ввести символ и преобразовать его в порядковое значение, используйте «% c» для scanf() и символ char [99] для ввода. – ChuckCottrill

ответ

4

«Я пытаюсь сканировать ввод данных пользователем (ASCII символов) как целое, и показать код ASCII для введенного символа»

Что вы должны сделать, это полная противоположность. Вы должны прочитать характер и отображать его как целое, то есть:

char c; 
scanf("%c", &c); // <-- read character 
printf("%d", c); // <-- display its integral value 

вход: a, выход: 97


Также отметим, что while(character != 999) не очень Удачный выбор для условия завершающего из ваш цикл. Проверка возвращаемого значения scanf, чтобы определить, было ли чтение характера успешным может быть более разумным здесь:

while (scanf("%c", &character)) { 
    printf("ascii: %d\n", character); 
} 
+0

Да, но его код перейдет в бесконечный цикл .. поскольку он не компенсирует ввод нажатого после ввода – sukhvir

+0

@sukhvir: Я отредактировал свой ответ, чтобы обратиться к циклу. – LihO

+0

Спасибо! Примерно 999: у меня первоначально было '! = 0' (это код завершения), но переключился на 999, потому что я получал 0 для ввода пользователя. –

1

попробовать это:

#include <stdio.h> 
int main(int argc, char *argv[]) { 

    char character; 

    printf("Welcome to ASCII:\n"); 

    do { 
    scanf("%c",&character); 
    getchar(); // to get rid of enter after input 

    printf("ascii: %d\n",character); 
    } while(character != 999); 

    printf("Done.\n"); 

    return 0; 
} 

выход:

d 
ascii: 100 
s 
ascii: 115 
0

You пытаются прочитать целое число (scanf («% d», & ...)), и это нормально, что операция завершилась неудачей, и t он равен 0 - значение по умолчанию для переменной int. Измените «% d» на «% c», и он должен работать.

+0

Я очень подозрительно отношусь к «значению по умолчанию для переменной int». C не работает так. Если извлечение завершилось неудачно, вы не должны прочитать переменную. Он не имеет детерминированного значения, и UB может читать его. –

+0

Добро пожаловать в stackoverflow, просто дружеский хэдз-ап, вы можете использовать backticks вместо кавычек для встроенного кода. – fontno

0

изменение:

printf("ascii: %c\n",character); 

Однако, что ваше состояние speciftied 999?

+0

999 - всего лишь код завершения (также может быть 0) –

Смежные вопросы