我需要一种方法来获取每个输入字符,并将它们放入一个二维数组(在本例中是一个char数组).

但是,因为我需要从有几个行尾(\n)的文件输入中获得这个字符,所以我不希望将这些行插入到数组中,所以我try 设置一个条件,如果字符是换行符,则不应该将其放入数组中,但它似乎不起作用.

我只是想说明一下,我正在try 自己制作这个方法,因为我在网上没有找到一个,而fgets是我找到的最好的方法.

我的代码是:

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

int main(int argc, char *argv[]) {

    char words[4][4][2];
    char verif[2];
  
    int i, j, l = 0, lin = 4, col = lin;

    printf("Insert numbers: ");
    for (i = 0; i < lin; i++)
    {
        for (j = 0; j < col; j++)
        {
            fgets(verif, 2, stdin);
            //since I was using the IDE to write I also put a condition not to add the enter for the input but it doesn't work too lol

            if (strcmp(verif, "\n\0") != 0 || strcmp(verif, "\r\0") != 0)
            {
                printf("copying...\n");
                printf("%s\n", verif);
                strcpy(words[i][j], verif);
                l++;
            }
            else
                j--;
        }
    }

    printf("\n");
        
    for (i = 0; i < lin; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf("-%s\t", words[i][j]);
        }
        printf("\n");
    }

    return 0;
}

我将使用的输入放在矩阵中:

1234
1234
1234
1234

对于像1234123412341234这样的正常输入,输出(打印矩阵)是正常的:

-1  -2  -3  -4  
-1  -2  -3  -4  
-1  -2  -3  -4  
-1  -2  -3  -4

推荐答案

fgets(verif, 2, stdin)是一种从标准输入读取单字节的扭曲方式.您可以只编写int ch = getchar();并直接处理字节值,而不是使用字符串比较.

然而,主要问题在于测试if (strcmp(verif, "\n\0") != 0 || strcmp(verif, "\r\0") != 0):您应该使用&&而不是||,因为您希望处理neither换行符nor回车符的输入,这将转换为(not换行符)and(not回车符).

以下是一个更简单的版本:

#include <stdio.h>

int main(int argc, char *argv[]) {
    char matrix[4][4];
    int lin = 4, col = lin;

    printf("Enter the digits: ");
    for (int i = 0; i < lin; i++) {
        for (int j = 0; j < col;) {
            int c = getchar();
            if (c == EOF) {
                fprintf(stderr, "premature end of file, aborting.\n");
                return 1;
            }
            if (c != '\n' && c != '\r') {
                printf("inserting %c\n", c);
                matrix[i][j] = c;
                j++;
            }
        }
    }

    printf("\n");
        
    for (int i = 0; i < lin; i++) {
        for (int j = 0; j < col; j++) {
            printf("-%c\t", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

C++相关问答推荐

GCC不警告隐式指针到整数转换'

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

减法运算结果的平方的最快方法?

C是否用0填充多维数组的其余部分?

Clang警告称,`ffi_type`与`sizeof`不兼容

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

在循环中复制与删除相同条件代码的性能

理解C版宏(看起来像未声明的变量?)

如何在下面的C代码中正确管理内存?

用C语言计算文本文件中的整数个数

如何在POSIX-UEFI中获得输入?

S在本文中的价值观到底出了什么问题?

覆盖读取函数,但当文件描述符为3或4时,我有问题

使用ld将目标文件链接到C标准库

运行时错误:在索引数组时加载类型为';char';`的空指针

Realloc():中止的下一个大小无效(核心转储)

为什么会出现此错误?二进制表达式的操作数无效

无算术运算符和循环的二进制乘法

C中的空指针是什么(_N)?

如何在Rust中处理C的longjmp情况?