Печать всех значений ASCII в C / C ++

0

Привет всем Всем давно, что я не общаюсь с языком C/C++ и просто пересмотрел концепции снова, и я столкнулся с этим вопросом, который попросил написать программу для отображения всех символов ASCII, и я написал следующее хорошее, но он не дает ожидаемого результата. Может кто-нибудь рассказать, что является проблемой с этим кодом.

#include<iostrem.h>
int main()
{
    unsigned char a;
    for(a = 0; a < 256; ++a)
    {
        cout << a << " ";
    }
    return 0;
} 
  • 11
    Там нет языка C / C ++.
  • 0
    это может показаться простым вопросом, но это показывает некоторые вещи, особенно в отношении максимального значения неподписанного символа. используйте вместо этого int или просто char.
Показать ещё 2 комментария
Теги:

9 ответов

13
Лучший ответ

a всегда меньше 256, поскольку unsigned char не может превышать 255. Вы написали бесконечный цикл.

В вашем включении также есть неправильное использование и добавление .h и вы не использовали пространство имен std в cout.

edit: Наконец, технически ASCII учитывает только первые 128 символов, все, что дальше, является доменом различных расширенных наборов символов.

  • 1
    Извиняюсь за орфографическую ошибку. Но почему цикл бесконечен ...? так как unsigned char имеет диапазон от 0 до 255, не завершится ли цикл, как только он достигнет 255 ...?
  • 2
    Неподписанный символ имеет длину только один байт, поэтому его максимальное значение составляет 255. Когда вы добавляете в него один, один переносится, а первый байт сбрасывается в ноль. Представьте себе, например, если у вас был только двузначный номер. Вы можете легко показать 10-99. Но если вы сделали 99 + 1, то теперь вы получите 100. Что компьютер делает здесь, так это просто сохраняет последние две цифры - 00 - так что он возвращается к исходному состоянию. Байты работают аналогично, за исключением диапазона «цифр» от 0 до 255 и откат до 255 + 1.
Показать ещё 4 комментария
6

Если вы можете использовать <stdio.h>, тогда это проще.

#include <stdio.h>

int main()
{
    for(int i = 0; i <= 255; i++) {
      fprintf(stdout, "[%d]: %c\n", i, i);
    }

  return 0;
}
  • 0
    Мне нравится, что stdio C гораздо проще в использовании (как правило), чем iostream C ++, также проще интернационализировать. Люди C ++ действительно бросили мяч там!
  • 2
    Я абсолютно согласен. Я предпочитаю stdio для таких вещей.
Показать ещё 1 комментарий
4

Другие ответы на это хорошо освещены. Я просто подумал, что я бы сказал, что было бы хорошо проверить, могут ли символы печатать до их печати:

#include <cctype>
#include <iostream>

int main()
{
    for(int a = 0; a < 256; ++a) // use int (big enough for 256)
        if(std::isprint(a)) // check if printable
            std::cout << char(a) << " "; // print it as a char
}
2

Попробуйте этот код:

=> C++

#include<iostream>
int main ()
{
    int a;
    for(a=0;a<256;++a)
    {
        cout<<(char)a<<" ";
    }
    return 0;
} 

=> С

#include<stdio.h>
int main ()
{
    int a;
    for(a=0;a<256;++a)
    {
        printf("%c " a);
    }
    return 0;
}
  • 1
    upvote для показа решения на обоих языках, хотя, очевидно, #include необходимо;)
0

Это, очевидно, очень старый вопрос, но если кто-то хочет на самом деле распечатать код ASCII вместе со своими номерами:

#include <iostream>
int main()
{  

char a; 

for (a=0; a<=127; a++)
{
    std::cout<<a<<" ";
    std::cout<<int(a)<<" "<<std::endl;
}

return 0;

}

NB/читателю:

код 0-31: непечатаемые символы; используемые для форматирования и управления принтерами

код 32-127: печатные символы; представляет буквы, цифры и знаки препинания.

0

оно работает.

#include <iostream>
using namespace std;

int main() {
    char a;
    int i;

    for (int i=0; i<256; i++){
        a=i;
        cout << i << " " << a << " " <<endl;
    }
    return 0;
}
0

С вашим кодом много проблем.

Во-первых, нет iostrem.h. После исправления этого вопроса iostream.h g++ приведет к fatal error: iostream.h: No such file or directory потому что стандартные библиотеки не должны включаться в .h

Изменение этого параметра на #include <iostream> приводит к error: 'cout' was not declared in this scope. Вам нужно std::cout << a чтобы он успешно скомпилировался.

Но даже после решения всех вышеперечисленных проблем было получено gcc с помощью -Wall -Wextra -pedantic

warning: comparison is always true due to limited range of data type

Это потому, что 256 находится вне unsigned char диапазона. Он работает только в том случае, если char имеет более 8 бит, что не относится к вашей платформе. Вы всегда должны включать все предупреждения компилятора. Это поможет вам определить множество проблем без необходимости спрашивать здесь.

Тем не менее, не используйте типы, меньшие, чем int для временных значений, если это не очень необходимо, потому что все они будут продвигаться до int в выражениях.

-1

Какой результат вы получаете? Я думаю, вам нужно вывести

Cout<<(chat)a;

В противном случае он вернет только целочисленный номер, который он назначил

  • 1
    я думаю, что вы имеете в виду (символ), но это не его проблема
  • 1
    и Cout тоже не прав
Показать ещё 1 комментарий
-1
#include <stdio.h>
int main ()
{
    unsigned char a;
    for(a=0;a<=255;a++)
    {
        printf(" %c  %d  \n ",a,a);
    }
    getch();
    return 0;
}
  • 0
    это будет печатать только символы от 0 до 254
  • 0
    Tq @ LưuVĩnhPhúc
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню