刚学C语言,不太懂。把键盘输入的由数字字符组成的字符串转换为相应的数字。例如把"123"转换为整数123

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刚学C语言,不太懂。把键盘输入的由数字字符组成的字符串转换为相应的数字。例如把"123"转换为整数123相关的知识,希望对你有一定的参考价值。

假设
1)字符串中只包括'0'~'9',无其他字符,而且能够确保转换得到的整数在区间[0, 9999]之内。
2)字符串由键盘随机输入

有很多方法,我这里用sscanf()函数实现,它的作用是从字符串读取,而不是从标准输入读取,除此之外,和scanf()函数相同:

//---------------------------------------------------------------------------

#include <stdio.h>

int main(void)

char a[80];
int b;
scanf("%s",a);//输入字符串
sscanf(a,"%d",&b);//从字符串a读取一个整数
printf("%d\n",b);//输出这个整数
return 0;

//---------------------------------------------------------------------------追问

那这道题呢:
假如数组中存储有某班C语言期末成绩(百分制)。请编程输出
1)该班成绩的平均分(两位小数)
2)不及格的下标和成绩,不及格总人数
3)高于90分的下标和成绩,高于90分的总人数
4)班内有大约30人,具体人数自定
5)成绩以初始化方式输入到数组中

追答

很简单,用循环就可以办到,建议不要到这里来找作业答案,这么简单的问题,应该自己完成。

追问

好吧,谢谢你,我只是刚学,还没觉得很简单,我会努力的。

追答

第二题的程序:

//---------------------------------------------------------------------------

#include

int main(void)

double ave=0,sco[5]=92,73.89,58,97.6,53.8;//sco数组用于保存每位学生的成绩,这里共有5位学生
int i,cnt;

for (i = 0; i90:"); //3)高于90分的下标和成绩,高于90分的总人数
for (cnt=i = 0; i90)
printf("Index:%d\t\t score:%g\n",i,sco[i]);
++cnt;


printf("total: %d\n\n",cnt);
return 0;

//---------------------------------------------------------------------------

参考技术A #include <stdio.h>
int main()
char a[10000];
int num=0,i=0;//num用来保存结果,i表示数组下标
gets(a);//接收字符串到数组a的库函数
while(a[i]!='\0')//字符串结束符'\0'
num=num*10+(a[i]-48);//48是0的asc码值,字符在进行运算时是用它的asc码来计算的
i++;

printf("%d",num);
while(1);
return 0;


我运行了一下,是可以的。希望对你有所帮助。追问

这个,是整数123那道题吗?

参考技术B #include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()

int i;
char ch[20];
aa: printf("请输入:");
gets(ch);
for(i=0;i<strlen(ch);i++)

if(ch[i]<'0' || ch[i]>'9')
break;


if(i < strlen(ch))

printf("输入只能为数字\n");
goto aa;

else
i = atoi(ch);

printf("%d\n",i);


用到一个stdlib.h头文件的atoi方法就行了
参考技术C void main()
char a[];
int i,s=0;
gets(a);
for(i=0:a[i]!=0:i++)
s=10*s+a[i]-'0';
printf("%d",s):
追问

第二题的这三问都可以在那个程序里实现吗?

c语言--键盘输入数字,输出汉字读法

例如:我输入4561。要求输出四千五百六十一
输入254。要求输出二百五十四
输入40001,输出四万零一
输入数字w,0<w<=99999999

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

char *change(char ch)

static char shu[3];
memset(shu, 0, 3);
switch(ch)

case '1':strcpy(shu,"一");break;
case '2':strcpy(shu,"二");break;
case '3':strcpy(shu,"三");break;
case '4':strcpy(shu,"四");break;
case '5':strcpy(shu,"五");break;
case '6':strcpy(shu,"六");break;
case '7':strcpy(shu,"七");break;
case '8':strcpy(shu,"八");break;
case '9':strcpy(shu,"九");break;
case '0':strcpy(shu,"零");break;
default:printf("输入有误!");exit(0);

return shu;


char *func(char *s, int len)

int i, j;
char *dest;
char *shu;
char *wei[4]="千","百","十","";

dest = (char *)malloc(64);
memset(dest, 0, 64);
switch(len)

case 1:j=3;break;
case 2:j=2;break;
case 3:j=1;break;
case 4:j=0;break;

for(i=0;i<len;i++)

shu = change(*(s+i));
if( !(i>0&&*(s+i-1)=='0'&&*(s+i)=='0') )

strcat(dest, shu);
if(*(s+i)!='0')
strcat(dest, wei[j+i]);


if( (strlen(dest)>2) && (strcmp(shu,"零")==0) )dest[strlen(dest)-2]='\0';
return dest;


int main()

int len;
char num[10];
char *hanzi, *tmp;

hanzi = (char *)malloc(64);
tmp = (char *)malloc(32);

printf("输入数字,1~99999999:");
gets(num);
len = strlen(num);
memset(hanzi, 0, 64);
memset(tmp, 0, 32);
if(len>4)

hanzi = func(num, len-4);
strcat(hanzi, "万");
tmp = func(num+len-4, 4);
if(strcmp(tmp, "零")!=0)
strcat(hanzi, tmp);

else hanzi = func(num, len);
printf("汉字读法:");
puts(hanzi);

free(hanzi);
free(tmp);
return 0;
参考技术A 用数组把没位上的数字都保存下来,在写个循环用switch语句进行转换就可以了,这个没有什么难度的

以上是关于刚学C语言,不太懂。把键盘输入的由数字字符组成的字符串转换为相应的数字。例如把"123"转换为整数123的主要内容,如果未能解决你的问题,请参考以下文章

c语言 从键盘上任意输入一个字符(字母大小写,数字,控制字符和其他字符)判断所属字符类型,只发

C语言程序

c语言--键盘输入数字,输出汉字读法

C语言 将输入整数转换成字符串输出

C语言如何在键盘中输入一个数字字符串并进行排序

用c语言从键盘输入两个数字,判断哪个数更大?