在C中获取功能而不等待输入

羚羊

我有一个关于gets函数的问题。

我目前正在编写2矩阵加法的程序,我对gets函数的行为感到困惑。从我从教程的描述中了解到的有关c中的gets()函数的内容来看,有人说“ gets函数将在成功时返回str,而在错误或文件末尾且未读取任何字符时返回NULL。”

for (matrix_number = 0; matrix_number < 2; matrix_number++)
{
    if (matrix_number == 0) { printf("MATRIX A\n"); }
    else { printf("MATRIX B\n"); }

    // dim = the dimension of the matrix that the user inputted
    // Loop counter is for cycling through the matrix row, if dim is 3 then cycle 3x
    // The user will type in the data in a format like this 
    //        Type in the data for row 1 : 1 2 3
    //        1 is the value for the first row and first column for the matrix
    //        2 is the value for the first row and second column for the matrix and so on

    for (loop_counter = 1; loop_counter <= dim; loop_counter++)
    {
        char row_value[20], space[2] = " ", *value_token;

        printf("Type in the data for row %d :",loop_counter);
        gets(row_value);

        value_token = strtok (row_value,space);

        while (value_token!=NULL)
        {
            insert( atoi(value_token) , matrix_number); 
            // convert value_token from string to int type
            value_token = strtok (NULL,space);
        }
    }
}

它可以编译,但是当我运行程序时,我得到了这样的内容

Welcome to the Matrix Addition Calculator Program!
Type in the dimension of the matrix : 3
MATRIX A
Type in the data for row 1 :Type in the data for row 2 :6 5 4
Type in the data for row 3 :3 2 1
MATRIX B
Type in the data for row 1 :1 2 3
Type in the data for row 2 :4 5 6
Type in the data for row 3 :7 8 9

我不确定会发生什么,对于矩阵A,第一行输入被跳过,但是对于矩阵B,第一行输入没有被跳过。

我目前正在elemtary luna上使用gedit编写代码,并使用gcc对其进行编译。基本luna在虚拟机上运行。

感谢所有阅读我的问题的人,如果信息不足,请让我知道,希望有人可以帮助我,非常感谢!:)

乔纳森·勒夫勒(Jonathan Leffler)

scanf()您使用阅读3中:

Type in the dimension of the matrix : 3

将换行符留在输入缓冲区中。以下调用gets()读取该换行符。这是一个标准问题。

另外,忘记gets()存在。它不再是标准C的一部分。它具有致命性,无法在敌对环境中安全使用。假设使用它会使您的程序崩溃—如果输入错误,那将会发生,并且除了避免使用之外,您无法采取任何措施来保护您的代码gets()这就是为什么它不再是标准C的一部分。

使用fgets()getline()代替。此处无关紧要,但是请记住,这些字符串在读取的字符串中包含换行符,这与gets()删除字符串不同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++不等待输入

来自分类Dev

c程序不等待输入

来自分类Dev

scanf不等待输入

来自分类Dev

fgets()不等待输入

来自分类Dev

Scanf 不等待输入

来自分类Dev

如何在不等待换行的情况下在C中接受用户输入?

来自分类Dev

如何在不等待其检索的情况下在C ++中获取内存位置?

来自分类Dev

返回不等待异步功能

来自分类Dev

fgets不等待用户输入

来自分类Dev

Java for 循环不等待输入

来自分类Dev

角度等待不等待功能完成

来自分类Dev

异步功能不等待Promise

来自分类Dev

React Native不等待功能完成

来自分类Dev

fgets不等待键盘输入

来自分类Dev

为什么我的程序不等待输入?

来自分类Dev

Python:循环不等待用户输入

来自分类Dev

Luis Dialog Sample不等待用户输入

来自分类Dev

Java程序不等待用户输入

来自分类Dev

Python:循环不等待用户输入

来自分类Dev

调用 readHex 值不等待用户输入

来自分类Dev

WaitUntil不等待/在WaitForSelectorAsync上获取HTML

来自分类Dev

使功能不等待其中的其他功能

来自分类Dev

尝试使用 node.js 中的 readline 从控制台读取输入,但应用程序不等待输入

来自分类Dev

请求不等待.net中的响应

来自分类Dev

For循环不等待JTextField中的用户响应

来自分类Dev

请求不等待.net中的响应

来自分类Dev

groovy 中的 Join() 不等待线程完成

来自分类Dev

不等待 web api 请求中的任务

来自分类Dev

在返回结果之前,nodejs不等待异步功能完成