我正在c中制作一个程序,因为它显示了这条消息 \。\ nul最后关闭失败:文件被截断... 当我进行语法检查时,这不是编译器错误,这是消息..
这里是代码..
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int T,N,K,i,j;
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d",&N);
scanf("%d",&K);
int A[N];
for(j=0;j<N;j++)
scanf("%d",&A[j]);
long int s1=pow(2, N);
int count,big=0,flag=0;
for(count=0;count<s1;count++)
{
for(j=0;j<N;j++)
{
if(count&(1<<j))
{
flag=(A[j]^K)^flag;
}
else if(count==0)
flag=K;
}
if(flag>big)
big=flag;
}
printf("%d\n",big);
}
return 0;
}
答案 0 :(得分:0)
问题是你在每次使用stdin
后都没有刷新scanf
,这会在输入缓冲区中留下newline
(按[enter]的结果),然后是作为以下scanf
调用的下一个值。您没有提示输入值的事实掩盖了您的输入请求被跳过的事实。添加询问每条数据的提示,并使用循环从输入缓冲区中提取newlines
,或者更改scanf
格式字符串以读取并每次丢弃newline
你读输入。注意,这些都不是完美的解决方案。试试以下内容:
printf ("\nEnter T: ");
scanf("%d%*c",&T);
for(i=0;i<T;i++)
{
printf ("\nEnter N: ");
scanf("%d%*c",&N);
printf ("\nEnter K: ");
scanf("%d%*c",&K);
int A[N];
for(j=0;j<N;j++) {
printf ("\nEnter A[%d]: ", j);
scanf("%d%*c",&A[j]);
}
通过提示输入,您至少会意识到由于newline
被视为您的预期输入而跳过输入请求。