[英]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.