C语言 修改程序 把手动输入改成读取.txt文件输入

为了方便,我只贴出程序的主程序,只要把开头的手动输入的变成读取.txt输入的就行intmain(){intnum,i,n,maxbit;NODE*p;printf("请输... 为了方便,我只贴出程序的主程序,只要把开头的手动输入的变成读取.txt输入的就行
int main()
{
intnum,i,n,maxbit;
NODE* p;
printf("请输入数的个数:(不等于0,至少输入2个)\n");
scanf("%d",&num);
LISTNODE *listnodep=malloc(sizeof(LISTNODE));
add_listnode(listnodep);
listnodep->listhead=NULL;
for(i=0;i<num;i++){
printf("第%d个数:",i+1);
scanf("%d",&n);
p=malloc(sizeof(NODE));
p->num=n;
add_node(&listnodep->listhead,p);
}
程序的输入部分就在这句话上面,过程是先输入个数,再一个一个输入数字。
chnum=0;
for(p=listnodep->listhead,n=-1;p;p=p->next){
n=n&p->num;
}
if(n==0){
if(condition_check(listnodep->listhead)){
chnum+=num;
}else{
loop();
}
}else{
chnum+=count1(n);
maxbit=count_maxbit(listnodep->listhead);
n=~(unsigned int)n%(1<<maxbit);
for(p=listnodep->listhead;p;p=p->next){
p->num&=n;
}
if(check_all0(listnodep->listhead)){
}else{
delete_all0(&(listnodep->listhead));
if(listnodep->listhead->next==NULL){
chnum+=count1(listnodep->listhead->num);
}else{
if(condition_check(listnodep->listhead)){
chnum+=countnum(listnodep->listhead);
}else{
loop();
}
}
}
}
printf("字母数=%d\n",chnum);
system("pause");
return 0;
}
求大神把开头的手动输入的改成读取下图显示的.txt输入,M就是程序中的num表示个数,第三行就是输入的数字。
展开
 我来答
百度网友6fa3859
2016-01-12 · TA获得超过3349个赞
知道小有建树答主
回答量:1148
采纳率:85%
帮助的人:450万
展开全部

    一般来说,从文件中读取数据,需要使用fopen打开文件,然后用fscanf、fread等函数从文件中读取数据。如果想对程序作出最小的改动的话,可以使用freopen函数。

    freopen用于重定向输入输出流。该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

函数原型:

FILE *freopen( const char *filename, const char *mode, FILE *stream );

参数:

    filename指定文件名,mode指定打开方式,stream指定需要重定向的流。


在这里,只要把标准输入流stdin重定向就可以,所以需要这样写:

freopen("file address", "r", stdin);

后面的代码不需做改动即可。

xoaxa
2014-02-26 · TA获得超过8613个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3616万
展开全部
int main() {
intnum,i,n,num,maxbit;
NODE *p;
char tmp[10];
FILE *fp = fopen("indata.txt","rt"); // 假定indata.txt是数据文件名
if(fp == NULL) {
printf("打开数据文件失败。\n");
return 1; // 1表明没有找到数据文件
}
fscanf(fp,"%s%d",tmp,&n);
fscanf(fp,"%s%d",tmp,&m);
LISTNODE *listnodep = (LISTNODE *)malloc(sizeof(LISTNODE));
add_listnode(listnodep);
listnodep->listhead = NULL;
for(i = 0; i < m && !feof(fp);i++) {
fscanf(fp,"%d",&num);
p = (LISTNODE *)malloc(sizeof(NODE));
p->num = num;
add_node(&listnodep->listhead,p);
}
fclose(fp);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-02-26 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1128万
展开全部
FILE *fp=fopen("**.txt","r");
char str[12];
int n,i;
for(i=0;i<num;i++)
{
fscanf(fp,"%s ",str); //fscanf遇换行或空格都会停止
sscanf(str,"%d",&n); //然后转换成整形
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
屍鬼封盡
2014-02-26 · TA获得超过325个赞
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:79.8万
展开全部
FILE *file = fopen ( "test_15_623" );
然后,把你程序中的所有scanf ( ... )
换成 fscanf ( file , ... );
追问
这样有指向性么?这个fscanf ( file , ... );自动按我的要求输入数据么?M后面的数据给num,第三行开始的数据自动读入?这么智能?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式