我是編程新手。我目前正在用c語言制作一個rot13程式,我試著用 "for"、"if "來作業,直到字母f顯示問號。如果我從a-z寫字母,加密的結果是:nopqrstuvwxyzabcde????????。我試圖改變加/抽象值、變數和int。
#include<stdio.h>/span>
int main()
{
char message[100], ch;
int i;
printf("輸入一個要加密的資訊:")。
gets(message)。
for(i = 0; message[i] != ''/span>; i){
ch = message[i];
if(ch >= 'a' && ch <= 'z'){
ch = ch 13;
if(ch > 'z'){
ch = ch - 26。
}
message[i] = ch;
}
else if(ch >= 'A'/span> && ch <= 'Z'){
ch = ch 13;
if(ch > 'Z'){
ch = ch - 26。
}
message[i] = ch;
}
}
printf("encrypted message: %s", message)。
return 0;
uj5u.com熱心網友回復:
你的代碼幾乎沒有問題。但在ASCII中存在一個陷阱。我們知道Ascii包含ASCII(0-127)字符和擴展ASCII(128-255)字符。Ascii使用7位元來表示,而擴展ASCII使用8位元。因此,當ch 13的值超過127,而你要從中減去26時,基本上就會產生一個負的十進制數字。
你可以像這樣通過列印來檢查 printf("%d", ch);。
而且,沒有與負數小數相關的ascii字符。這就是為什么它產生的是垃圾值。你應該在賦值前檢查ch = ch 13。
請看下面的代碼作為參考。
#include<stdio.h>/span>
int main()
{
char message[100], ch;
int i;
printf("輸入一個要加密的資訊:")。
scanf("%s"/span>, message);
for(i = 0; message[i] != ''/span>; i){
ch = message[i];
if(ch >='a' && ch <='z'){
if (ch 13 > 'z') {
ch = ch - 13;
}
else ch = ch 13;
message[i] = ch;
}
else if(ch >='A' && ch <='Z'){
if (ch 13 > 'Z') {
ch = ch - 13;
}
else ch = ch 13;
message[i] = ch;
}
}
printf("Encrypted message: %s"/span>, message);
return 0;
uj5u.com熱心網友回復:
最可能的是char在你的機器上被簽名。所以ch = ch 13在某些情況下最終是負數(例如,當ch是z)。因此,if(ch > 'z'){不會像你預期的那樣作業。
嘗試一下
int main(void) {
char ch = 'z'/span>;
ch = ch 13;
if (ch > 'z')
{
puts(" Larger")。
}
else; }
{
puts("less or equal")。
}
printf("ch value is %d
", ch)。)
return 0;
這可以列印:
Less or equal
ch值為-121。
使用一個無符號型別或一個int來計算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314517.html
標籤:
下一篇:在開關的情況下,條件被忽略了
