2014-11-21 18 views
0

大家好久没有接触过C/C++语言,只是重新修改了这些概念,并且我遇到了这个问题,它要求编写一个程序来显示所有的ASCII字符和我写了以下好的,但它没有给出预期的结果。任何人都可以请告诉这个代码有什么问题。在C/C++中打印所有的ASCII值

#include<iostrem.h> 
int main() 
{ 
    unsigned char a; 
    for(a = 0; a < 256; ++a) 
    { 
     cout << a << " "; 
    } 
    return 0; 
} 
+10

没有C/C++语言。 – 2014-11-21 05:06:14

+0

它可能看起来像一个简单的问题,但它显示了一些东西,特别是关于无符号字符的最大值。使用int而不是char。 – 2014-11-21 05:11:34

+0

''不是标准库,也许你想'' – bitcell 2014-11-21 07:21:55

回答

13

a总是小于256,因为unsigned char类型不可能走高于255你已经写了一个无限循环。

您的包含还有一个拼写错误和额外的.h,并且您没有使用cout上的std命名空间。

编辑:最后,从技术上讲,ASCII只计算前128个字符,一切都超出了是各种扩展字符集的域。

+1

中使用[std :: printf](http://en.cppreference.com/w/cpp/io/c/fprintf)。但是,循环是如何无限的......?因为无符号字符的范围从0到255不会终止,一旦它达到255 ...? – 2014-11-21 05:11:35

+2

一个无符号字符只有一个字节长,所以它的最大值是255.当你添加一个字符时,它会被结转,第一个字节重置为零。想象一下,例如,如果你只有一个两位数的数字。你可以很容易地显示10-99。但是如果你做了99 + 1,你现在得到100.计算机在这里做的只是保持最后两位数字 - 00 - 所以它回滚到它开始的位置。字节的工作方式类似,除了“数字”范围从0-255并在255 + 1回滚。 – 2014-11-21 05:13:43

+0

其无符号字符,不能超过255 – 2014-11-21 05:13:53

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

我喜欢C的'stdio'比C++的'iostream'更容易使用(通常),更容易国际化。 C++人真的把球丢在那里! – 2014-11-21 05:08:09

+1

我绝对同意。我更喜欢'stdio'这样的东西。 – 2014-11-21 05:09:39

+0

@ AdamD.Ruppe您仍然可以在C++ – 2014-11-21 07:39:56

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显示两种语言的解决方案,明显#includes必要虽然;) – 2014-11-21 05:08:57

-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 – 2014-11-21 07:42:22

+0

Tq @LưuVĩnhPhúc – 2014-11-21 13:17:18

+1

这仍然不工作,因为在255之后,a ++将溢出并成为0.该程序将循环无限 – 2014-12-02 17:36:52

-1

你得到什么结果呢?我认为你需要输出

Cout<<(chat)a; 

否则就只会返回它分配

+1

我认为你的意思是(字符),但那不是他的问题 – 2014-11-21 05:13:08

+1

和'Cout'也是错误的 – 2014-11-21 05:56:45

+0

在移动..很多错字 – Rain 2014-11-21 11:43:09

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 
} 
0

有很多与你的代码的问题。

首先没有iostrem.h。纠正这iostream.h克++后会给出一个fatal error: iostream.h: No such file or directory因为standard libraries must not be included with .h

将其更改为#include <iostream>导致error: 'cout' was not declared in this scope。您需要std::cout << a才能使其成功编译。

但即使解决所有上述问题后,一个重要的事情是由海湾合作委员会输出与-Wall -Wextra -pedantic选项

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

这是因为256是外unsigned char的典型范围。它只适用于char超过8位的情况,这不是平台的情况。您应该始终启用所有编译器警告。这将帮助您识别很多问题,而无需在此处询问。

尽管如此,除非非常必要,否则不要使用小于int的类型作为临时值,因为它们全都将在表达式中被提升为int

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; 
}