我需要你的帮助,我会告诉你的代码只是一个开始,但我已经有一个初学者的问题,所以请帮助我,我不认为对于那些知道C.的人来说会很难。 / p>
这是我的代码:
#include <stdio.h>
int main ()
{
int matrix[10][10];
int nrows, ncols, i, j, chosen;
printf("Enter number of rows: "); //user enters number of rows
scanf("%d", &nrows);
if(nrows < 2){
printf("\n Out of range, please try again");
exit(5);
}
printf("Enter number of columns: "); //user enters number of columns
scanf("%d", &ncols);
if(ncols < 2){
printf("\n Out of range, please try again");
exit(5);
}
printf("Enter matrix elements: "); //user enters all the elements for Matrix
for(i = 0; i < nrows; i++){
for(j = 0; j < ncols; j++){
scanf("%d",&matrix[i][j]);
}
printf("\n");
}
printf("This is your matrix: \n");
for(i = 0; i < nrows; i++){
for(j = 0; j < ncols; j++){
printf("%d \t",matrix[i][j]);
}
printf("\n");
}
return 0;
}
没什么特别的,用户输入行数和列数,然后用元素填充这个矩阵。
现在问题,现在用户可以输入任何类型的整数,正面和负面, 我只想限制用户,以便他/她只能输入正数。
答案 0 :(得分:1)
你写道,你试图使用另一个变量和&#39;而#39;循环,所以你可以这样做:
for(i = 0; i < nrows; i++){
for(j = 0; j < ncols; j++){
tmp=0;
scanf("%d",&tmp);
while(tmp<0){
printf("enter positive numbers only\n");
scanf("%d",&tmp);
}
matrix[i][j]=tmp;
}
}
答案 1 :(得分:1)
你陷入的另一个巨大陷阱是未能检查scanf
的回归。由于各种格式说明符处理前导空格的细微差别,以及输入后保留在scanf
中的字符,stdin
因新的C程序员正确处理而出了名的问题。拍摄。
至少,您必须检查返回并验证实际发生的预期转化次数,未返回EOF
,表示用户通过生成手册取消了输入{k <1}} Ctrl + d (或 Ctrl + z on windoze)。如果字符输入可以跟随(尾随EOF
仍然未读),您还必须清空出现错误后stdin
内的所有字符并成功转换。
另一种风格是将代码扩展得更广泛。年轻人的眼睛可能没有问题,但是对于世界其他地方而言,适当的间距使代码更具可读性。
将这些部分组合在一起,并将'\n'
的读数和清空int
放入函数中以避免重复的代码块,您可以执行类似以下操作:
stdin
示例使用/输出
#include <stdio.h>
#include <stdlib.h>
/** simple function to empty all characters that remain
* in stdin. Needed when using scanf for user input.
*/
void empty_stdin()
{
for (int c = getchar(); c != '\n' && c != EOF; c = getchar()) {}
}
/** abbreviated function to read integer value from user.
* returns value on success, exits if user cancels.
* empties stdin after call to scanf.
*/
int getint ()
{
int n = 0,
rtn = 0; /* variable to capture return of scanf */
if ((rtn = scanf ("%d", &n)) == EOF) { /* if user cancels, exit */
fprintf (stderr, "user canceled input.\n");
exit (EXIT_FAILURE);
}
empty_stdin(); /* empty all chars remaining in stdin */
return n;
}
int main (void)
{
int matrix[10][10] = {{0}};
int nrows, ncols, i, j;
printf ("Enter number of rows: ");
nrows = getint();
if (nrows < 2) {
printf ("\n Out of range, please try again");
return 5;
}
printf ("Enter number of columns: ");
ncols = getint();;
if (ncols < 2) {
printf ("\n Out of range, please try again");
return 5;
}
printf ("\nEnter matrix elements\n");
for (i = 0; i < nrows; i++)
for (j = 0; j < ncols; j++) {
printf (" matrix[%d][%d]: ", i, j);
matrix[i][j] = getint();
}
printf ("\nThis is your matrix: \n");
for (i = 0; i < nrows; i++) {
for(j = 0; j < ncols; j++)
printf (" %3d", matrix[i][j]);
putchar ('\n');
}
return 0;
}
仔细看看,如果您有其他问题,请告诉我。