c语言读取数字的代码(c语言怎么读取文件中的数字)
C语言 读取数字
首先建议将数字的分隔符改为",",因为控制台读取是以“空格、制表符、回车”来判断结束的。如果一定要用空格来间隔,就需要固定输入项数,可以将之读到一个数组中来解析,这似乎很不方便。下面这个例子是改用","来分隔输入的数字,括号内向下循环对对应下标的数组项赋值,完全符合你的要求,最大值是设为99,当然你可以方便地改为12,.cpp文件代码如下:
(因是粘贴上的,百度的输入框又小,代码排列可能需要你微调!)
(本例对于输入数字的重复问题未做专门处理,如有必要,你自己尝试一下啦,搞不定再说!)
//====================================================================
// .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;
}

C语言提取字符串中的所有数字
#includestdio.h
int
main()
{
char
str[1000];//保存读取到的字符串
long
sum=0,data[1000];
int
i=0,top=0;
printf("输入字符串:\n");
scanf("%s",str);
while(str[i]!='\0')//未到字符串末尾
{
if(str[i]='0'str[i]='9')//如果是数字
sum=sum*10+(str[i]-'0');//连续数字转换为数.
else
if(sum!=0)//保存这个数
{
data[top++]=sum;
sum=0;
}
i++;
}
if(sum!=0)//判断最后一个字符是否是数
data[top++]=sum;
printf("字符串中的数字是:\n");
i=0;
while(itop)
{
printf("%ld",data[i]);
if(itop-1)//不打印最后一个逗号
printf(",");
i++;
}
printf("\n");
system("pause");
return
0;
}
C语言编程:从字符串中提取数字
1、首先打开visual studio软件,新建一个C语言文件,如下图所示。
2、接着在C语言文件的顶部导入库内容,如下图所示。
3、接着运用scanf函数接收用户输入的字符串。
4、然后利用printf函数打印一下用户输入的内容。
5、运行程序以后就会弹出如下图所示的CMD界面,输入内容就会自动接收到,然后原样输出内容。
6、最后如果接收其他的类型,比如整数,那么类型就需要改变成int,如下图所示,并且scanf里面的接收类型变为d%,提取字符串中的数字。
从文本文件里读取数字,c语言如何实现
voidmain()
{
FILE*fin;
inta,b,c,d;
chars[20];
floatf1,f2,f3,f4;
fin=fopen("abc.txt","r");//打开
fscanf(fin,"%1d%1d%1d%1d",a,b,c,d);//按1位整型读前4个数
printf("a=%db=%dc=%dd=%d\n",a,b,c,d);
rewind(fin);//文件回绕到开始处
fscanf(fin,"%s",s);//按字符串读一串
printf("s=%s\n",s);
rewind(fin);//文件回绕到开始处
fscanf(fin,"%1f%1f%1f%1f",f1,f2,f3,f4);//按1位float型读前4个数
printf("%f%f%f%f\n",f1,f2,f3,f4);
flcose(fin);
}
abc.txt内容:
123456789
读到数组:
inty[20];
inti;
fin=fopen("abc.txt","r");
for(i=0;i9;i++)fscanf(fin,"%1d",y[i]);
扩展资料
C语言中文件的读取
fopen(打开文件)
相关函数open,fclose
表头文件#includestdio.h
定义函数FILE*fopen(constchar*path,constchar*mode);
函数说明参数路径包含包含打开的文件路径和文件名,参数模式字符串则代表着流形态。
模式有以下几种形态类别:
r:预期文件,该文件必须存在。
r+:可读写的文件,该文件必须存在。
w:只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+:可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a以附加的方式打开只写文件。若文件不存在,则建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。