2014-11-21 19 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; 
}