读取几个ASCII字符并获取值

时间:2013-11-20 15:32:52

标签: c ascii

有人可以解释或纠正我的代码吗? 我正在尝试输入几个字符并获得ascii值

ex:输入:ab;输出:9798

这是我的代码,但最后有10个

#include <stdio.h>

int main() { 
    char c;
    printf("Enter any character\n");

    for (c=0; c<=122; c++)
    {
        scanf("%c", &c);
        printf("%d",c);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

如果查看ASCII table,则10的十进制值是换行符。换句话说,您将\n字符作为输入的一部分进行处理。例如,当用户复制粘贴多行或按下 Enter 键时,可能会发生这种情况。如果您不希望发生这种情况,则需要格外小心忽略\n。例如:

#include <stdio.h>

int main() { 
    char c;
    printf("Enter any character\n");

    for (c=0; c<=122; c++)
    {
        scanf("%c", &c);
        if (c == '\n')
            break; /* Or perhaps continue? Depends on what you actually want. */
        printf("%d",c);
    }
    return 0;
}

另外,请注意,不同的系统可能有不同的约定,实际上是换行符。在UNIX上,它仅为\n个字符,在Windows上,它可能是一个组合,或\r\n。因此,如果您想让您的程序可移植,则需要将其考虑在内。你可以自己做,也可以使用其他库(想到GNU getline)。您可以详细了解换行符here

答案 1 :(得分:1)

您可能希望从输出中排除一些字符,而不仅仅是'\ n',在这种情况下,您可以尝试这样的事情:

#include <stdio.h>
int isEndingChar(char c) {
   char terminators[3] = {'\r','\t','\n'}
   int n;
   for( n=0; n<3; n++ ) {
      if( terminators[i]==c )
         return 1;
   }
   return 0;
}

int main() { 
   char c;
   printf("Enter any character\n");
   for (c=0; c<=122; c++)
   {
      scanf("%c", &c);
      if( isEndingChar( c ) )
        break;
      printf("%d",c);
   }
   return 0;
}