簡體   English   中英

C ++打印奇怪的字符

[英]C++ Printing strange characters

所以我在下面有這個程序,目前我運行它后輸出:

abcdefghijklmnopqrstuvwxyz
eklpyqrbgjdwtcaxzsnifvhmou
TEst
iyniЉhb�{���{���`�5b�v4b�q4b�{����8b�`�5b��`{���{����o���7�vb��{�����or��o���@`�lhb���5b��`x@ 

有什么原因嗎? 而且目前打算隨機化的線不是隨機的

#include <algorithm>
#include <array>
#include <iostream>
#include <numeric>
#include <fstream>
#include <string>

using namespace std;

int main()
{   
    char Text[256];
    array<char, 26> letters;
    iota(letters.begin(), letters.end(), 'a');
    for(char c: letters) //Array before shuffling
    {   
        cout << c;
    }
    cout << '\n';
    random_shuffle(letters.begin(), letters.end());
    for(char c: letters) //After shuffling
    {
        cout << c;
    }
    cout << '\n';
    cin.getline (Text,256);
    for (char & c : Text)
    {
        if (c == 'a' || c == 'A')
        {
            cout << letters[0];
        }
        else if (c == 'b' || c == 'B')
        {
             cout << letters[1];
        }
        else if (c == 'c' || c == 'C')
        {
             cout << letters[2];
        }
        else if (c == 'd' || c == 'D')
        {
             cout << letters[3];
        }
        else if (c == 'e' || c == 'E')
        {
             cout << letters[4];
        }
        else if (c == 'f' || c == 'F')
        {
             cout << letters[5];
        }
        else if (c == 'g' || c == 'G')
        {
             cout << letters[6];
        }
        else if (c == 'h' || c == 'H')
        {
             cout << letters[7];
        }
        else if (c == 'i' || c == 'I')
        {
             cout << letters[8];
        }
        else if (c == 'j' || c == 'J')
        {
             cout << letters[9];
        }
        else if (c == 'k' || c == 'K')
        {
             cout << letters[10];
        }
        else if (c == 'l' || c == 'L')
        {
             cout << letters[11];
        }
        else if (c == 'm' || c == 'M')
        {
             cout << letters[12];
        }
        else if (c == 'n' || c == 'N')
        {
            cout << letters[13];
        }
        else if (c == 'o' || c == 'O')
        {
            cout << letters[14];
        }
        else if (c == 'p' || c == 'P')
        {
            cout << letters[15];
        }
        else if (c == 'q' || c == 'Q')
        {
            cout << letters[16];
        }
        else if (c == 'r' || c == 'R')
        {
            cout << letters[17];
        }
        else if (c == 's' || c == 'S')
        {
            cout << letters[18];
        }
        else if (c == 't' || c == 'T')
        {
            cout << letters[19];
        }
        else if (c == 'u' || c == 'U')
        {
            cout << letters[20];
        }
        else if (c == 'v' || c == 'V')
        {
            cout << letters[21];
        }
        else if (c == 'w' || c == 'W')
        {
            cout << letters[22];
        }
        else if (c == 'x' || c == 'X')
        {
            cout << letters[23];
        }
        else if (c == 'y' || c == 'Y')
        {
            cout << letters[24];
        }
        else if (c == 'z' || c == 'Z')
        {
            cout << letters[25];
        }
        else if (c == ' ')
        {
            cout << ' ';
        }       
        else if (c == '/n')
        {
            return 0;
        }
        else 
        {
        cout << c;
        }
    }
}
else if (c == '/n')
{
    return 0;
}

應該

else if (c == '\n')
{
    return 0;
}

但是,如果您要尋找輸入的結尾,那么您實際上想要

else if (c == '\0')
{
    return 0;
}

這是一個空終止符,表示字符串的結尾。 基本上,您將獲得存儲在整個256個字符數組中的所有垃圾。

但是,這對您的29 if else語句沒有幫助。 嘗試這個:

if(c == ' '){ // Space
    cout << ' ';
}
else if(c >= 'A' && c <= 'Z'){ // Uppercase
    cout << letters[c - 'A'];
}
else if(c >= 'a' && c <= 'z'){ // Lowercase
    cout << letters[c - 'a'];
}
else if(c == '\0'){ // End of string
    return 0;
}
else{ // Anything else
    cout << c;
}

這個怎么運作:

計算機中沒有“字母”,只有二進制。 'A'不存在,但是01000001 65 ,即A 因此,如果您輸入“ A”,您的程序將看到65。但是,我碰巧知道,在您的letters數組中,您在位置0有A,因此letters[0] == letters['A' - 'A'] 相同的邏輯可用於B,C,D等。 小寫字母也一樣,它們的范圍不同(97-122)。

問題在這里

else if (c == '/n')   // '/n' is not correct

更改為

else if (c == '\0')   // Check EOF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM