【问题标题】:Why is my C program asking for one more input than it should? And the extra input doesn't even do anything为什么我的 C 程序要求的输入比它应该的多一个?额外的输入甚至没有做任何事情
【发布时间】:2012-03-01 16:26:59
【问题描述】:

该部分的代码,如果你想编译它。

基本上我必须把以下数据输入到程序中:

4 5
12 5 7 0 -3
9 11 2 5 4
0 -5 9 6 1
2 12 93 -15 0
5 3
7 1 31
0 0 5
-5 -3 2
9 41 11
0 13 31

前4 5 & 5 3 代表第一个和第二个矩阵的维度,后面的数据是矩阵的数据。

问题是,当我复制并粘贴它时,它会要求再输入一个,当我输入任何东西(比如 84)时,它可以完美地工作(输出明智),而 84 似乎什么也没做。为什么要这个额外的?

#include <stdio.h>

int main(int argc, char *argv[]) {
    int rows1 = 1, columns1 = 1, rows2 = 1, columns2 = 1;    // variables for number of rows and columns in each matrix 
        int i, j, k;                                             // loop variables 

        // These will affect the loop's length
        scanf("%d %d", &rows1, &columns1);
        int matrix1[rows1][columns1];
        for (i = 0; i < rows1; i++) {
            for (j = 0; j < columns1; j++) {
                scanf("%d ", &matrix1[i][j]);
            }
        }


        scanf("%d %d", &rows2, &columns2);
        int matrix2[rows2][columns2];
        for (i = 0; i < rows2; i++) {
            for (j = 0; j < columns2; j++) {
                scanf("%d ", &matrix2[i][j]);
            }
        }
}

【问题讨论】:

  • 您的数据不清楚,能否详细说明一下?
  • 对不起,它在实际帖子中的格式很差。我现在已经修好了。

标签: c matrix


【解决方案1】:

你的最后一次 scanf 需要 2 件事

                scanf("%d ", &matrix[i][j]);
                //     112

事物 1 是一个整数
事物 2 是零个或多个空格

如果您向scanf 提供“31”(或“31”或“31\n”),它将期待更多空格。 一旦您提供“84”,它就知道空格已结束并继续执行程序。


建议:从scanf 转换说明符中删除所有空格:scanf("%d%d") 很好! "%d" 转换说明符已经删除了数字前的空格。

更好的是,使用fgets() 读取数据并使用sscanf() 解析

【讨论】:

    【解决方案2】:

    该行为是由于以下空格引起的:

    scanf("%d ", &matrix1[i][j]);
    scanf("%d ", &matrix2[i][j]);
    

    将格式说明符更改为:

    scanf("%d", &matrix1[i][j]);
    scanf("%d", &matrix2[i][j]);
    

    (嗯,只有第二个很重要,但你不妨保持它们相同。)

    格式说明符中的空格与输入中的一个或多个空格匹配。当您的代码运行时,最终的scanf() 会从stdin 读取,直到遇到非空白字符(84 中的8),此时它返回并且您的程序结束。

    【讨论】:

      【解决方案3】:

      我认为发生的事情是您在使用时在整数后指定了空格 scanf("%d ", &amp;matrix2[i][j]);scanf 在使用 %d 时默认忽略空白。但是,您指定了一个空格,因此当它到达文件末尾并看到后面没有空格的整数时,它看不到任何与您的格式化输入匹配的内容。输入新整数后,您还会在满足输入格式的最后一个数字之后放置一个空格。所以不是你需要的数字,而是空格。

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 2015-08-18
        • 2017-01-11
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多