【发布时间】:2020-06-03 08:42:46
【问题描述】:
我想直接在 C 中输入一个二维数组,仅由单个空格和换行符分隔。同时我还想验证用户是否输入了有效的个位数整数(正数或负数)。 我尝试了以下方法。
int A[3][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
scanf("%d",&A[i][j]);
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",A[i][j]);
printf("\n");
}
但我想要两件事:-
- 首先验证其是否为一位整数的输入。
- 不仅适用于正整数和 0,也适用于负整数。
例如。 应接受如下输入并将其存储在二维数组中
1 2 -3 4
-5 1 2 -6
1 1 2 3
如果我不清楚,我很抱歉。一个重要的组成部分是应确认输入是否为整数,即输入应为字符或字符串,如果是整数(可以通过 isdigit() 等函数确定,则应将其转换为一个整数值。 以下代码块适用于单个正值
char c = getchar();
if (isdigit(c))
int value = c - '0';
但是,我不知道如何在完整的二维数组输入中为负整数启用此功能。
【问题讨论】:
-
你可以查看scanf的结果。它应该在成功读取后返回 1。如果您需要更详细的输入验证,请使用 fgets 将整个输入读取为字符串。
-
因此,输入可以是任何 ASCII 字符。不是吗?
-
@Lucas 是的,任何 ASCII 字符,包括换行符和空格。目标是从输入中提取格式正确的整数值(正或负)。
-
@MohammadSally 所以,你需要知道
ASCII中没有任何负值,都是从0到255。参考here。 -
而您在
int value = c - '0';这一行中所做的是将character digit转换为其整数值。它仅适用于数字字符串或字符数字。它取c的ASCII 值并从中减去0的ASCII 值。
标签: arrays c multidimensional-array input