[英]how can i verify that i got N^2 integers from standard input(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)获取值? 是来自while((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接收信息。 请提供代码,以便我可以理解和学习。
非常感谢您的帮助。
先获得第一个号码
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()
一次读取一行并将其解析为int
。
如果将这些作为参数提供给程序,则可以使用argc
和argv
轻松进行验证部分。 假设您要检查给定的输入数量是否正确。
所以你检查一下
int main(){
char *ptr;
int N;
errno = 0;
if( argc > 2){
long NN = strtol(argv[1], &ptr, 10);
if (errno != 0 || *p != '\0' || NN > INT_MAX || NN < INT_MAX) {
fprintf(stderr, "%s\n", "Error in parsing");
exit(1);
}
else{
N = (int)NN;
}
}
int totalElmts = N*N;
if( N && totalElmts / N != N){
fprintf(stderr, "%s\n","Overflow");
}
if( argc != (totalElmts + 2) ){
fprintf(stderr, "%s %s %s\n",argv[0],"N","NxN elements");
}
for(size_t i = 2; argv[i] != NULL; i++)
{
//convert argv[i] to `int`
}
...
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.