问题数组和char

时间:2017-11-08 11:45:25

标签: c

我是编程新手。我在这段代码中找不到错误。 我正在尝试将一些字符翻译成数字。

程序要求输入一条消息,但在我输入字符后没有任何显示。

#include <stdio.h>
#define N 100

int main (void)
{
    char message[N];
    int i;
    printf ("Enter a message: ");

    for (i=0; i<N; i++){
        scanf ("%c", &message[i]);
    }
    // characters are in the array

    for (i=0; i<N; i++){
        if (message[i]=='a')
            message[i]='4';
        if (message[i]=='b')
            message[i]='8';
        if (message[i]=='e')
            message[i]='3';
        if (message[i]=='i')
            message[i]='1';
        if (message[i]=='o')
            message[i]='0';
        if (message[i]=='s')
            message[i]='5';
    }
    // characters are translated

    for (i=0; i<N; i++)
        printf ("%c ", message[i]);
    // characters are printed

    return 0;
}

3 个答案:

答案 0 :(得分:1)

您只需使用scanf("%s",message);

即可阅读整条信息

这样你就不必等待输入所有100个字符,你可以检查你给出的任何输入(可能少于100个字符)。您可以使用printf

进行打印
printf("%s",message);

使用switch根据不同情况更改字符。

switch(message[i]){
   case 'a': message[i]='4';break;
   ...
}

而不是循环所有N字符循环,直到strlen(message)message[i]!='\0'

答案 1 :(得分:0)

for (i=0; i<N; i++){
    scanf ("%c", &message[i]);
}

应该是

scanf ("%s", message);

你应该替换这个循环

for (i=0; i<N; i++){
    if (message[i]=='a')
        message[i]='4';
    if (message[i]=='b')
        message[i]='8';
    if (message[i]=='e')
        message[i]='3';
    if (message[i]=='i')
        message[i]='1';
    if (message[i]=='o')
        message[i]='0';
    if (message[i]=='s')
        message[i]='5';
}

这一个:

char*m;
for (m=message; *m; m++){
switch (*m)
{
  case 'a': *m=4; break;
  case 'b': *m=8; break;
  and so on...
}

最后

printf ("%s\n", message);

答案 2 :(得分:0)

您使用什么编译器?您的代码在https://www.jdoodle.com/c-online-compiler中运行良好。 对于这种情况,如果我完全理解,您可以更好地获得完整的消息,使用:

scanf("%s", message);

而不是:

for (i=0; i<N; i++){
scanf ("%c", &message[i]);
}