读书人

C小例题求解:输入字符数字转换成数字

发布时间: 2012-02-29 16:44:10 作者: rapoo

C小例题求解:输入字符数字转换成数字,如何输出中文字.
例题1:
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
printf( "输入字符,如何转换成数字\n ");
printf( "请输入0~9的数字: ");
ch=getche();
//ch=ch- '0 '; //这个减去一个字符 '0 '就转换成数字了
ch=ch-0; //直接减去一个数字,却不能转换 ??????????
//还有别的转换方法吗??
printf( "\n你输入的是数字是%d\n ",ch);
system( "PAUSE ");
return 0;
}

这里是输入一个数字 字符,如何转换成数字了呢,我上面写了一种转换方法是书上看到的不知道原理,求解,还有没有别的转换方法呢。

例题2:
#include <stdio.h>
#include <conio.h>
int main(void)
{
char name[11]; //定义一个字符数组
int str_num; //计算字符长度
int i; //循环变量
printf( "如何输出中文字符\n ");
printf( "请输入中文字符串: ");
gets(name);
//这里写个现实英文的
str_num=strlen(name); //计算字符长度
printf( "一共输入了%d个字符\n ",str_num);
for(i=0;i <str_num;i++)
{
printf( "你输入了字符:%c\n ",name[i]); //怎么输出中文呢,请指点下
}
system( "PAUSE ");
return 0;
}
我这里写的是输出字母可以,但我们知道中文是两个字符这因该怎么输出。
我试着把循环改为
for(i=0;i <str_num;i+=2)
{
printf( "你输入了字符:%s\n ",name[i]+name[i+1]);
}
新手入门,望请谁解答下。


[解决办法]
1)
建议你查一下ASCII表,
字符  16进制  10进制
'0 ' 0x30 48
'1 ' 0x31 49
'2 ' 0x32 50
...
...
'9 ' 0x39 57
假入之前输入了字符 '2 '
ch=getche();之后,ch的值是 '2 '(即10进制的50)

所以 ch = ch - '0 ';等价于 ch = ch - 48; 即ch = 50 - 48
而 ch = ch - 0; 等价于 ch = '2 ' - 0; 即ch = 50 - 0

2)对于汉字,其ASCII码小于0
可以这样写:
#include <stdio.h>
#include <conio.h>
#include <dos.h>

int main(void)
{
char name[1000]; //定义一个字符数组
char s[3];
char *p = name;

int str_num; //计算字符长度
int i; //循环变量
printf( "如何输出中文字符\n ");
printf( "请输入中文字符串: ");
gets(name);

str_num=strlen(name); //计算字符长度


printf( "一共输入了%d个字符\n ",str_num);//汉字当做两个字符
i = 0;

while(*p)
{
if(*p > = 0)
{
//这是数字或字母等英文符号
printf( "你输入了字符:%c\n ",*p);


}
else
{
//这是汉字
//先将这个汉字拷贝到另外一个字符串s
s[0] = *p;
s[1] = *(p+1);
s[2] = 0;
printf( "你输入了字符:%s\n ",s); //输出这个汉字
p++; //汉字共要跳两个字符,所以这里先跳一个

}

p++; //跳一个字符
i++;
}
printf( "实际输入了%d个字符\n ",i);//汉字当作一个字符

system( "PAUSE ");
return 0;
}

读书人网 >C语言

热点推荐