Привет всем Всем давно, что я не общаюсь с языком C/C++ и просто пересмотрел концепции снова, и я столкнулся с этим вопросом, который попросил написать программу для отображения всех символов ASCII, и я написал следующее хорошее, но он не дает ожидаемого результата. Может кто-нибудь рассказать, что является проблемой с этим кодом.
#include<iostrem.h>
int main()
{
unsigned char a;
for(a = 0; a < 256; ++a)
{
cout << a << " ";
}
return 0;
}
a
всегда меньше 256, поскольку unsigned char не может превышать 255. Вы написали бесконечный цикл.
В вашем включении также есть неправильное использование и добавление .h
и вы не использовали пространство имен std
в cout
.
edit: Наконец, технически ASCII учитывает только первые 128 символов, все, что дальше, является доменом различных расширенных наборов символов.
Если вы можете использовать <stdio.h>
, тогда это проще.
#include <stdio.h>
int main()
{
for(int i = 0; i <= 255; i++) {
fprintf(stdout, "[%d]: %c\n", i, i);
}
return 0;
}
stdio
C гораздо проще в использовании (как правило), чем iostream
C ++, также проще интернационализировать. Люди C ++ действительно бросили мяч там!
stdio
для таких вещей.
Другие ответы на это хорошо освещены. Я просто подумал, что я бы сказал, что было бы хорошо проверить, могут ли символы печатать до их печати:
#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
}
Попробуйте этот код:
=> 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;
}
Это, очевидно, очень старый вопрос, но если кто-то хочет на самом деле распечатать код 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: печатные символы; представляет буквы, цифры и знаки препинания.
оно работает.
#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;
}
С вашим кодом много проблем.
Во-первых, нет 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
в выражениях.
Какой результат вы получаете? Я думаю, вам нужно вывести
Cout<<(chat)a;
В противном случае он вернет только целочисленный номер, который он назначил
Cout
тоже не прав
#include <stdio.h>
int main ()
{
unsigned char a;
for(a=0;a<=255;a++)
{
printf(" %c %d \n ",a,a);
}
getch();
return 0;
}