我已經編寫了代碼,用於執行凱撒移位密碼,從一個名爲「input.txt」的文件獲取輸入並將輸出寫入名爲「output.txt」的文件。它技術上工作正常;輸出結果幾乎是完美的,但是當我運行它時,我得到關於Line 56
的Debug Assertion Failed
消息,這是關閉輸出文件的行。該錯誤還表示:表達式:(unsigned)(c+1) <= 256
。這裏是我的代碼:凱撒密碼;調試斷言失敗
void cipher(char input[], int key);
int main()
{
int i, key=0;
char c, input[MAX];
FILE *file1;
file1 = fopen("input.txt","r");
printf("Enter the key: ");
scanf("%d", &key);
getchar();
for(i=0;(c=getc(file1))!=EOF && i<MAX;i++)
input[i]=c;
fclose(file1);
cipher(input, key);
return 0;
}
void cipher(char input[], int key)
{
int length = strlen(input)-1;
int i;
char c;
FILE *file2;
file2 = fopen("output.txt","w");
for (i=0;i<length;i++)
{
if (isalpha(input[i]))
{
c = (toupper(input[i]) - 'A'+key) % 26 + 'A';
fprintf(file2, "%c", c);
}
else if (input[i]==' ')
fprintf(file2, "\n");
}
fclose(file2);
}
哦,不太緊迫的問題,但是當代碼吐出輸入,如果輸入改變線路,如「輸入文字\ n這裏」,那麼當它的密碼爲「文本」和「這裏」,它把它們放在一起,而不是像它應該放在單獨的行上。如果有人知道這是爲什麼,可以幫助我,我會很感激,但主要的是這個錯誤。
「我對這個網站還比較陌生,我還沒弄清楚如何正確格式化代碼而不會爆炸。」選擇您的代碼塊並點擊'{}'按鈕。請參閱http://stackoverflow.com/editing-help#code – Johnsyweb 2013-04-24 04:25:19
如果輸入[i] =='\ n''那麼你什麼都不寫,因此「不太緊迫的問題」 – Keith 2013-04-24 04:30:38
是否有更多的代碼,共享?是否有一些函數或進程正在測試你正在執行斷言的輸出? – Jason 2013-04-24 04:43:58