将消息翻译为B1FF语言时出现问题

时间:2019-07-19 15:57:07

标签: c

  

我写了一个程序,将句子翻译成B1FF语言。当我输入一条消息并按Enter键时,它不会使用特定的代码给出任何输出。当我以特定方式编写代码时,我可以使其工作,但我选择以另一种方式编写,这应该是相似的。您能解释为什么它不起作用吗?

     

这段代码适用于我的程序,我认为它与其他代码相似:

     

for(;(message [len] = getchar())!='\ n';)           len ++;

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define N 50

int main() {
char message[N];
int len=0;
printf("Enter message: ");
/*this is the part that is not working and i have no idea why. I 
  thought it's similar to the other code i provided*/
do {
    message[len] = getchar();
    len++;
} while (message[len] != '\n');

for(int i = 0; i < len; i++) {
    switch(toupper(message[i])) {
        case 'A': putchar('4'); break;
        case 'B': putchar('8'); break;
        case 'E': putchar('3'); break;
        case 'I': putchar('1'); break;
        case 'O': putchar('0'); break;
        case 'S': putchar('5'); break;

        default: putchar(toupper(message[i])); break;
    }
}
printf("!!!!!!!!!!");
return 0;

}

1 个答案:

答案 0 :(得分:0)

关于样本代码的一些观察。在这里

len++;
message[len] != '\n' /* at this stage message[len] contains Garbage not the valid char due to len++ */

lenmessage[len] != '\n'语句之前递增,然后访问数组的len+1个字符会导致未定义的行为。为了避免这种情况,您可以像

message[len-1] != '\n'

接下来,message数组不是以null结尾的。从循环中出来后,用'\0'结束数组。对于例如

message[len] = '\0';

最好的方法是在声明自身的同时初始化char数组。对于例如

char message[50] = {}; /* zeroed the whole array */