scanf("%[^\n]"读入一行数据 为何出现死循环 求解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scanf("%[^\n]"读入一行数据 为何出现死循环 求解?相关的知识,希望对你有一定的参考价值。

参考技术A 你可以先看看scanf函数返回值的具体解释。
scanf("%d
%d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end
of
file,返回值为EOF。
也就是说,当它没有读取到数据的时候,其实返回的是0,而不是EOF,所以你的while循环的判断条件写错了,应该写成>0

UVA 12563 "Jin Ge Jin Qu hao" (背包)

传送门

 

debug了好一会,突然发现,输出错了,emmm.........

明天再写debug历程

贴身ac代码先

技术图片
 1 #include<bits/stdc++.h>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 #define memF(a,b,n) for(int i=0;i <= n;a[i++]=b);
 6 const int maxn=1e5+50;
 7 
 8 int n,T;
 9 int t[60];
10 int dp[maxn];
11 
12 void Solve()
13 
14     memF(dp,-1,T);
15     dp[0]=0;
16     for(int i=1;i <= n;++i)
17     
18         for(int j=T-1;j >= t[i];--j)
19         
20             if(dp[j-t[i]] != -1)
21                 dp[j]=max(dp[j],dp[j-t[i]]+1);
22         
23     
24     int ans=*max_element(dp,dp+T-1);
25     for(int i=T-1;i >= 0;--i)
26         if(dp[i] == ans)
27         
28             printf("%d %d\n",dp[i]+1,i+678);
29             return ;
30         
31 
32 int main()
33 
34     int test;
35     scanf("%d",&test);
36     for(int kase=1;kase <= test;++kase)
37     
38         scanf("%d%d",&n,&T);
39         for(int i=1;i <= n;++i)
40             scanf("%d",t+i);
41 
42         printf("Case %d: ",kase);
43         Solve();
44     
45     return 0;
46 
View Code

 

以上是关于scanf("%[^\n]"读入一行数据 为何出现死循环 求解?的主要内容,如果未能解决你的问题,请参考以下文章

scanf("%[^\n]"读入一行数据 为何出现死循环 求解?

scanf("%[^\n]"读入一行数据 为何出现死循环 求解?

for(i=0;num[i]!='\n';i++) scanf("%c",&num[i]); 为啥无法结束输入?? num是浮点型的

c语言中如何检查输入值是不是为数字

c语言:fscanf(fp,"%*[^\n]")为啥可以跳过全部字符直到下一个换行符

关于C语言printf的使用,为何输出乱码