【问题标题】:How to input a 2-D array directly in C with negative values, spaces and newline如何在 C 中直接输入带有负值、空格和换行符的二维数组
【发布时间】: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");
    }

但我想要两件事:-

  1. 首先验证其是否为一位整数的输入。
  2. 不仅适用于正整数和 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


【解决方案1】:

如果您想验证一个数字是否为一位数,只需检查它是否介于 -9 和 9 之间。

至于负数,我很确定 scanf%d 修饰符可以捕捉到这一点。

如果答案不正确,请在下方评论,以便我修复它:)

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

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

应该做的伎俩

【讨论】:

    【解决方案2】:

    首先,告诉用户输入值row-wisecolumn-wise。在这种情况下,这样问

    printf("Enter integers row-wise");

    现在用户将输入值。

    扫描这些值后,放置一个if 语句以验证该值是greater than or equal to -9 and less than 9。如果值在continue; 范围内,则输入exit(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;
    }
    
    

    【讨论】:

    • 您的代码将始终到达continue,因为每个数字要么大于 0,要么等于 0,要么小于 0...
    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多