最终关闭失败:文件被截断

时间:2014-12-09 03:33:51

标签: c syntax-error

我正在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;   
}

1 个答案:

答案 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被视为您的预期输入而跳过输入请求。