如何验证我从标准输入(Stdin)获得N ^ 2个整数?

时间:2017-12-03 14:43:01

标签: c stdin

我遇到了需要提交的C项目的问题。我被要求编写一个获得N和N ^ 2整数的程序,并检查它们是否创建了一个魔方。

然而,我错过了输入应该来自stdin,我不知道该怎么做,因为我使用printf请求用户给N并扫描它然后要求用户输入N ^ 2整数并检查它是否创建魔方。但是,我不知道如何从stdin做到这一点。

输入应为以下形式:sizeofN,N1,N2,...,N ^ 2。例如:3 8 1 6 3 5 7 4 9 2 - 意味着3是N而其他元素是它之后的内容。

所以我的问题是:

1)如何以上述方式从标准输入(stdin)获取值?是来自像((c = getchar())!= EOF),还是有更聪明的方式?

2)我如何检查我是否真的有N ^ 2项? (第一个数字是N,我应该得到N ^ 2个输入,例如,如果我得到:3 8 1 3 4 5 9 8 5这意味着N应该是3,我应该得到9个整数,但我只得到8,我怎样才能编写一个函数来检查我确实得到N ^ 2个数字正在变为N?

我已经编写了一个程序来检查一个给定的矩阵是否形成一个魔方,所以问题是从stdin接收信息。请提供代码,以便我能理解和学习。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

首先获得第一个数字

if( scanf("%d",&N) != 1){
   fprintf(stderr,"Error in input");
   exit(1);
}

现在你验证它是否确实是一个好数字。

   if( N <= 0 ){
       fprintf(stderr,"Enter integral N >= 1");
       exit(1);
   }

现在循环,

   for(size_t i = 0; i < N*N; i++){
       if( scanf("%d",&a[i]) != 1){
           fprintf(stderr,"Enter integral N >= 1");
           exit(1);
       }
   }

在此scanf()的解决方案中,您获得了N^2个数字,因为在每次迭代中您都正确输入了一个整数。

使用getchar()不是一个好选择。因为size>=4的每个幻方将至少有2位数字。您不能直接使用getchar()来获取它们,除非您相应地处理它们并从中获取整数,这是getchar()的一个选项,但不必要地使事情变得复杂。

如果你想验证如果输入的数量多于输入的数量或者对输入采取更精细的控制,那么你可以使用fgets()并一次读取一行并将其解析为{{ 1}}。

如果这些是作为程序的参数提供的,那么您可以使用intargc轻松完成验证部分。假设您要检查给定的输入数量是否正常。

所以你检查,

argv