C中的字符到ASCII

时间:2014-05-05 12:43:33

标签: c

我有一个功课,我正在尝试制作这个递归程序,但我错了。试图联系我的老师,但她已经离开这个国家,我感到迷茫。

关于该计划:

用户输入char符号,直到他输入'。'然后程序应该在屏幕上打印输入的符号,但前提是它们的ASCII码是偶数。

我做了我的想法,但在某个地方我出错了。

问题在于,当我输入"10 12 14 33 11 55 7 222 44 2 ."时,我会打印"2 44 222 4 2 0"。我不明白是因为我们正在谈论符号,所以我希望输入数字,其次是为什么要打印"0 2 4"而不是"10 12 14"

我现在真的很困惑。我的希望在你身边!

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void ReversePrint()
{
   char ch='A';
   scanf("%c",&ch);
   if(ch!='.')
   {
      ReversePrint();
      if (ch%2==0)
      {
         printf("%c",ch);
      }
      else
      {
         printf("");
      }
   }
}
int main()
{
   printf("ENTER SYMBOLS:\n");
   ReversePrint();
   printf("\n");
   system("Pause");
   return 0;
}

5 个答案:

答案 0 :(得分:1)

我建议在代码中进行以下更改

  1. 将呼叫的位置更改为相同的功能
  2. 在检查字符之前,将其转换为整数形式,然后对转换后的整数执行if..operation
  3. 我不知道你是否正在寻找

    您的代码将是: -

       #include <stdio.h>
       #include <stdlib.h>
    
    void ReversePrint()
    {
       char ch='A';
       **int n;**
       scanf("%c",&ch);
       if(ch!='.')
       {
          **n=ch;**
    
          if (n%2==0)
          {
             printf("%c",ch);
          }
          else
          {
             printf("");
          }
           **ReversePrint();**
       }
    }
    int main()
    {
        printf("ENTER SYMBOLS:\n");
        ReversePrint();
        printf("\n");
        system("Pause");
        return 0; 
     }
    

答案 1 :(得分:0)

该程序在我看来完美无缺。

如果ascii代码是偶数,则输入的每个字符都以相反的顺序输出。可能会让您感到困惑的是,它甚至会输出您输入的空间。如果要排除非数字字符,则必须对其进行测试,例如

if (ch % 2 == 0 && isdigit(ch)) {
    printf("%c", ch)
}

由于在else部分没有任何反应,你可以完全消除它。

如果您想输入和输出整数而不是仅输入数字,您可以尝试

int n;
scanf("%d", &n);

if (n % 2 == 0) {
    printf("%d", n)
}

答案 2 :(得分:0)

  

问题是当我输入“10 12 14 33 11 55 7 222 44 2”时。一世   得到印刷“2 44 222 4 2 0”。   我不明白我应该   输入数字,因为我们正在谈论符号,其次是为什么   是打印“0 2 4”而不是“10 12 14”?

那是因为每个字符都是单独检查的。 44不是44,它是4和4,而不是44。

Spaces也是一个ascii代码,并在程序中打印出来。

您似乎对Ascii Code和Ascii Symbol之间的区别感到困惑,请查看Ascii Table

在你的其他地方,你什么都不打印,它只消耗处理时间,你可以完全跳过其他的。

您可以通过查看char是否具有32(十进制)值来检查空间,并选择不打印它们以获得更好的输出。

答案 3 :(得分:0)

以下代码最多可读取由空格分隔的MAX_NUMBERS。字符串必须以空格和点结束。

它将读取一个数字并将其添加到表格中,然后将其添加到另一个数字中并再次添加,直到它达到“。”。然后,表格编号仅以偶数顺序显示。

因此,对于字符串10 12 14 33 11 55 7 222 44 2 .,输出将为"2 44 222 14 12 10"

#include <stdio.h>
#include <stdlib.h>

#define MAX_NUMBERS 500

int getNumber()
{
   char ch;
   int i, loop = 0, nb = -1;
   char number[4];

   /* Read one number (max 3 chars) */
   i = 0;
   do
   {
      scanf("%c", &ch);
      if (ch != ' ' && ch != '.')
      {
          number[i] = ch;
          i++;
       }
       else 
       {
           loop = 1;
       }
   } while(loop == 0 && i < 4);

   if (ch == '.' || i == 0)
   {
       nb = -1;
   }
   else
   {
       number[i] = '\0';
       nb = atoi(number);
   }
   return nb;
}

int main()
{
    int nb = 0, count, i;
    int numbers[MAX_NUMBERS];
    printf("ENTER SYMBOLS:\n");
    count = 0;
    while(nb > -1 && count < MAX_NUMBERS)
    {
        nb = getNumber();
        /* printf("<%d>", nb); */
        if (nb > -1)
        {
            numbers[count] = nb;
            count++;
        }
    }
    /* reverse printing */
    for (i=0; i < count; i++)
    {
        /* select only even numbers */
        if ((numbers[count - 1 - i] % 2) == 0)
        {
            printf("%d ", numbers[count - 1 - i]);
        }
    }
    printf("\n");
    system("Pause");
    return 0;
}

考虑到这段代码并不完美,它不会检查给定输入的有效性,但它会做你想要的。

答案 4 :(得分:0)

使用int,因为它是0-255的数字输入。

void ReversePrint(void){
    int ch;
    if(scanf("%d", &ch)==1){
        ReversePrint();
        if(ch % 2 == 0)
            printf("%d ", ch);
    }
}