Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在C语言中直接输入带有负值、空格和换行符的二维数组_Arrays_C_Multidimensional Array_Input - Fatal编程技术网

Arrays 如何在C语言中直接输入带有负值、空格和换行符的二维数组

Arrays 如何在C语言中直接输入带有负值、空格和换行符的二维数组,arrays,c,multidimensional-array,input,Arrays,C,Multidimensional Array,Input,我想直接在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

我想直接在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");
    }
如果我不清楚,我很抱歉。一个重要的组成部分是,应确认输入是否为整数,即输入应为字符或字符串,如果它是整数(可通过isdigit()等函数确定),则应将其转换为整数值。 以下代码块适用于单个正值

char c = getchar(); 
  if (isdigit(c))
     int value = c - '0';

但是,我不知道如何在完整的2D数组输入中为负整数启用此功能。

如果要验证数字是否为单个数字,只需检查其是否介于-9和9之间

至于负数,我很确定
%d
scanf
修饰符会捕捉到负数

如果答案不正确,请在下面进行评论,以便我可以修复:)

Edit:我忘了注意
scanf
返回读取元素的数量。因此,将其与1进行比较(因为您一次读取一个元素)将允许您知道输入是否是部分的。 大概是这样的:

if (scanf(" %d", &A[i][j]) != 1){ 
   //here goes the code for when the input is partial
}

应该这样做

因此,首先,告诉用户输入值
。在这种情况下,像这样问

printf(“按行输入整数”)

现在,用户将输入值

扫描这些值后,放入
if
语句,以验证值
大于或等于-9且小于9
。如果值在范围内<代码>继续否则放入
退出(1)语句并告诉用户输入的值不正确。像这样:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int A[3][3];
    int i, j;
    for( i = 0; i < 3; i++ )
    {
        for( j = 0; j < 3; j++)
        {
            scanf("%d", &A[i][j]);
            if(A[i][j] >= -9 && A[i][j] <= 9)
                continue;
            else
            {
                printf("Enter correct values.\n");
                exit(1);
            }
        }
    }


    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
            printf("%d ",A[i][j]);
        printf("\n");
    }
    return 0;
}

#包括
#包括
int main()
{
INTA[3][3];
int i,j;
对于(i=0;i<3;i++)
{
对于(j=0;j<3;j++)
{
scanf(“%d”、&A[i][j]);

如果(A[i][j]>=-9&&A[i][j]您可以检查scanf的结果。读取成功后,它应该返回1。如果需要更详细的输入验证,请使用fgets将整个输入读取为字符串。因此,输入可以是任何ASCII字符。不是吗?@Lucas是的,任何ASCII字符,包括换行符和空格。目标是提取格式正确的整数值s、 正数或负数,从输入开始。@mohammaddly因此,您需要知道
ASCII
中没有任何负值,所有的值都从0到255开始。请参阅。您在这一行中所做的
int value=c-'0';
是将
字符数字
转换为其整数值。它只适用于数字或字符串字符数字。它取
c
的ASCII值,然后从中减去
0
的ASCII值。您的代码将始终到达
continue
,因为每个数字要么大于0,要么等于0,要么小于0。。。