Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
C-缓冲区大小条件在循环时不中断 更新: 好吧,我完全错了。我没有得到想要的结果的原因是,我正在从终端读取数据,并在程序继续执行之前等待回车键。我实际上需要做的是编程一个“屏幕”或x11窗口来读取实时输入。因此,我的问题现在是多余的。谢谢大家的建议。_C_Time_While Loop_Keypress_Break - Fatal编程技术网

C-缓冲区大小条件在循环时不中断 更新: 好吧,我完全错了。我没有得到想要的结果的原因是,我正在从终端读取数据,并在程序继续执行之前等待回车键。我实际上需要做的是编程一个“屏幕”或x11窗口来读取实时输入。因此,我的问题现在是多余的。谢谢大家的建议。

C-缓冲区大小条件在循环时不中断 更新: 好吧,我完全错了。我没有得到想要的结果的原因是,我正在从终端读取数据,并在程序继续执行之前等待回车键。我实际上需要做的是编程一个“屏幕”或x11窗口来读取实时输入。因此,我的问题现在是多余的。谢谢大家的建议。,c,time,while-loop,keypress,break,C,Time,While Loop,Keypress,Break,有没有更好的方法来编程,让我能够捕获 按键时间?还有,为什么while循环中的BUFFERSIZE不是有条件的 打破循环 #define BUFFERSIZE 100 int main(void) { int terminalInput; int keyPress = 0; int inputArrayBuffer[BUFFERSIZE]; int bufferExceptionFlag = 0; printf("\n\t\t\t->

有没有更好的方法来编程,让我能够捕获
按键
时间?还有,为什么while循环中的
BUFFERSIZE
不是有条件的 打破循环

#define BUFFERSIZE 100 

int main(void) {

    int terminalInput;
    int keyPress = 0;
    int inputArrayBuffer[BUFFERSIZE];
    int bufferExceptionFlag = 0;

    printf("\n\t\t\t->");                                   /* Prompt */

    while((terminalInput = getchar()) != '\n' && keyPress < BUFFERSIZE) {
        inputArrayBuffer[keyPress] = terminalInput;
        ++keyPress;

        if (keyPress >= BUFFERSIZE) {
            bufferExceptionFlag = 1;
        }
    }
    return 0;
}
#定义缓冲区大小100
内部主(空){
int终端输入;
int按键=0;
int-inputArrayBuffer[BUFFERSIZE];
int bufferExceptionFlag=0;
printf(“\n\t\t\t->”;/*提示符*/
while((terminalInput=getchar())!='\n'&&keyPress=缓冲区大小){
bufferExceptionFlag=1;
}
}
返回0;
}

一些问题。首先,您的inputArrayBuffer应该是
char
数组,而不是
int
数组。其次,有一些标准的C库,其中包含您想要做的事情的功能

问题1:“有没有更好的方法来编程,让我能够捕捉按键时间?

对。对于读取
stdin
直到遇到换行符或最大长度,来自
stdio.h
fgets
函数可以很好地工作(尽管可能存在替代方案)。大概

fgets(inputArrayBuffer, BUFFERSIZE, stdin)
keyPress = strlen(inputArrayBuffer) - 1; // -1 because the newline '\n' is included in strlen if you use fgets
我知道您想知道用户输入的键数,不包括换行键。这本质上是字符串长度。实现这一点的一个更简单的方法是简单地确定用户输入的字符串的长度。大概

fgets(inputArrayBuffer, BUFFERSIZE, stdin)
keyPress = strlen(inputArrayBuffer) - 1; // -1 because the newline '\n' is included in strlen if you use fgets
如果您必须一次捕获一个字符,那么您建议的原始代码应该可以工作,只需确定将inputArrayBuffer定义为
char inputArrayBuffer[BUFFERSIZE]

问题2:“那么,为什么while循环中的BUFFERSIZE条件没有脱离循环?”

它肯定应该打破循环。但是不要混淆
bufferExceptionFlag
等于值1表示
keyPress
没有导致循环中断。显然,当您在循环内
++keyPress
时,如果
keyPress
的值为99,则它将变为100,这将导致设置
bufferExceptionFlag
。但是,在下一次循环迭代中,
keyPress
将为false,循环将中断

在我看来,这里有一个更简单、更恰当的解决方案

#include <stdio.h>
#include <string.h>
#define BUFFERSIZE 100

int main(void) {
    char inputArrayBuffer[BUFFERSIZE];
    unsigned long keyPress = 0;
    printf("\n\t\t\t->");                                   /* Prompt */
    fgets(inputArrayBuffer, BUFFERSIZE, stdin);
    keyPress = strlen(inputArrayBuffer) - 1; // -1 because the newline '\n' is included in strlen if you use fgets
    printf("User entered: %s\n", inputArrayBuffer);
    printf("Input length: %lu\n", keyPress);
    return 0;
}
#包括
#包括
#定义缓冲区大小100
内部主(空){
char inputArrayBuffer[BUFFERSIZE];
无符号长按键=0;
printf(“\n\t\t\t->”;/*提示符*/
FGET(输入缓冲区、缓冲区大小、标准输入);
keyPress=strlen(inputArrayBuffer)-1;//-1,因为如果使用fgets,则换行符“\n”包含在strlen中
printf(“用户输入的:%s\n”,inputArrayBuffer);
printf(“输入长度:%lu\n”,按键);
返回0;
}

请注意,FGET在其读取的字符串上包含换行符。要删除此字符,可以执行类似以下操作:
inputArrayBuffer[keyPress]='\0'

还有,为什么while循环中的BUFFERSIZE条件没有脱离循环?
您确定吗?一旦按键达到100,“有没有更好的方法……”是的,绝对有。基本上一次只能读取一个字符,最大值为
BUFFERSIZE
个字符。有一些C库函数可以实现这一点,比如
fgets()
。我希望BUFFERSIZE条件能够起作用,但事实并非如此,我当然有兴趣知道原因。关于一次读一个字,这是我需要的。。。就像一个终端输入传感器,而不仅仅是从键盘上捕捉字符串。好吧,我完全错了。我没有得到想要的结果的原因是,我正在从终端读取数据,并在程序继续执行之前等待回车键。我实际上需要做的是编程一个“屏幕”或x11窗口来读取实时输入。因此,我的问题现在是多余的。谢谢大家的建议。