C语言 读取数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 读取数字相关的知识,希望对你有一定的参考价值。
我现在输入一串字符: (1 2 3)(5 6)
输入的字符都是(数字)(数字)类型的,如何读取括号内数字并存储在一个a[12]中。例子:
输入(1 2 3)(5 6)则赋值: a[1]=2, a[2]=3, a[3]=1, a[5]=6,a[6]=5,即括号内循环,同时在12以内的未赋值数组全部赋值它自己比如,a[4]=4,a[7]=7等.
这个如何用C程序写出?
补充,括号数不一定,同时最大值应该是n由用户输入不超过12
(因是粘贴上的,百度的输入框又小,代码排列可能需要你微调!)
(本例对于输入数字的重复问题未做专门处理,如有必要,你自己尝试一下啦,搞不定再说!)
//====================================================================
// .cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
//例子用到的变量
bool bCont = true;
int iFlag = 0;
char cInput[1024];
int iMax = 0;
int iTmpArray[100]; //临时数组
int iObiArray[100]; //目的数组
int iIndex = 0; //记录iTmpArray的未赋值项的最小下标
//例子用到的辅助函数
void InitArr(bool bFlag) //数组初始化,参数为1时两个数组都执行,
//0时执行临时数组
if (bFlag)
for (int i = 0; i < 100; i++)
iTmpArray[i] = -1;
iObiArray[i] = -1;
else
for (int i = 0; i < 100; i++)
iTmpArray[i] = -1;
//字串格式判定
bool CheckFormat()
if (cInput[0] == 'Q' || cInput[0] == 'q')
exit(0);
if (cInput[0] == 'H' || cInput[0] == 'h')
cout << "\n【本 例 帮 助】" << endl;
cout << "1、本例最大值(非0)限制在两位数以内!" << endl;
cout << "2、数字串输入格式举例:(12,2,0,8)(3,7)(5,4,9)" << endl;
cout << "3、数字串中数字值不能超过最大值!" << endl;
cInput[0] = NULL;
iFlag = 0;
return FALSE;
int length = (int)strlen(cInput);
if (cInput[0] != 40 || cInput[length - 1] != 41)
printf("\n【错误:输入格式错误!】\n");
return false;
for (int i = 0; i < length; i++)
if (cInput[i] < 48 || cInput[i] > 57)
if (cInput[i] != 44 && cInput[i] != 40 && cInput[i] != 41)
printf("\n【错误:输入了非法字符!】\n");
return false;
return true;
//解析数字串
BOOL Analysis()
int length = (int)strlen(cInput);
for (int i = 0; i < length; i++) //遇到"("或","开始从下一位读数
if (cInput[i] == 44 || cInput[i] == 40)
if (iIndex <= iMax)
int iTmp = atoi(&cInput[i+1]);
if (iTmp > iMax)
printf("\n【错误:输入的数字超过最大值!】\n");
return false;
iTmpArray[iIndex] = iTmp;
iIndex++;
else
printf("\n【错误:数组填充溢出,可能是输入的数字个数超过最大值规定的数组容量!】\n");
return false;
else if (cInput[i] == 41) //读到")"结束本段读数,并进行处理
//括号内循环对目的数组赋值
for (int k = 0; k < iIndex; k++)
iObiArray[iTmpArray[k]] = iTmpArray[k+1];
if (k == iIndex - 1)
if (iTmpArray[k+1] != -1)
printf("\n程序运行错误!\n");
return false;
else
iObiArray[iTmpArray[k]] = iTmpArray[0];
InitArr(0);
iIndex = 0;
return true;
int _tmain(int argc, _TCHAR* argv[])
InitArr(1);
ZeroMemory(cInput,sizeof(cInput));
cInput[0] = NULL; //防止输入0时阻塞
cin.clear();
cin.sync();
while(bCont)
switch (iFlag)
case 0: //输入最大值范围
printf("\n【Q退出 H帮助】请输入菜单码或最大值:");
cin >> cInput;
iFlag = 1;
break;
case 1: //最大值范围校验
if (cInput[0] == 'Q' || cInput[0] == 'q')
exit(0);
if (cInput[0] == 'H' || cInput[0] == 'h')
cout << "\n【本 例 帮 助】" << endl;
cout << "1、本例最大值(非0)限制在两位数以内!" << endl;
cout << "2、数字串输入格式举例:(12,2,0,8)(3,7)(5,4,9)" << endl;
cout << "3、数字串中数字值不能超过最大值!" << endl;
cInput[0] = NULL;
iFlag = 0;
break;
if (cInput[0] < '1' || cInput[0] > '9' || strlen(cInput) > 2)
cin.clear();
cin.sync();
ZeroMemory(cInput,128);
cInput[0] = NULL;
cout << "\n输入格式错误,请重新输入:";
cin >> cInput;
break;
iMax = atoi(cInput);
if (iMax > 99)
cin.clear();
cin.sync();
ZeroMemory(cInput,sizeof(cInput));
cInput[0] = NULL;
cout << "\n最大值超界,请重新输入:";
cin >> cInput;
break;
else iFlag = 2;
break;
case 2: //输入数字串并检查格式
cin.clear();
cin.sync();
ZeroMemory(cInput,sizeof(cInput));
cInput[0] = NULL;
printf("\n【Q退出 H帮助】请在最大值(%d)以内按格式(,,,)\n输入要填充数组的数字:", iMax);
cin >> cInput;
if (CheckFormat()) iFlag = 3;
break;
case 3: //数字串解析并填充数组
if (Analysis())
printf("\n输入内容排列后输出:");
//这里直接变换并输出数值,不再对数组进行完整赋值
for (int i = 0; i <= iMax; i++)
if (iObiArray[i] == -1)
cout << i;
else
cout << iObiArray[i];
if (i < iMax)
cout << " ";
if (i == iMax)
cout << endl;
InitArr(1);
iIndex = 0;
iFlag = 0;
else
iFlag = 2;
InitArr(1);
iIndex = 0;
break;
return 0;
参考技术A 没看懂你的意思,怎样循环?提供断续的代码供你参考:
char a[12];int 1;
printf("\r\n请输入(不回车):");
for(i=0;i<12;i++)
printf("%c",a[i]=getch());
if(a[i]=='('||a[i]==')') a[i]=i;
else a[i]=atoi(a[i]);
补充:
ascI 转化为整数的函数为:atoi(); 参考技术B #include <stdio.h>
void main()
char ch,pre='#';
int i=0,num=0,a[12];
for(i=0;i<12;i++)
a[i]=-1;
i=0;
printf("请输入:\n");
while((ch=getchar())!='\n')
if((ch<'0' || ch>'9' )&&(pre>='0' && pre<='9'))
a[i++]=num;
num=0;
else
if(ch>='0' && ch<='9')
num=num*10+ch-'0';
pre=ch;
for(i=0;i<12;i++)
if(a[i]==-1)
a[i]=i;
for(i=0;i<12;i++)
printf("a[%d]=%d\n",i,a[i]);
/*
输入(1 2 3)(7 5)( 4 5 )(11 12)(10)
输出结果
a[0]=1
a[1]=2
a[2]=3
a[3]=7
a[4]=5
a[5]=4
a[6]=5
a[7]=11
a[8]=12
a[9]=10
a[10]=10
a[11]=11
*/
以上是关于C语言 读取数字的主要内容,如果未能解决你的问题,请参考以下文章