Tag: stdin

Linux C选择:管道回显到输入工作,但从键盘读取不?

我想了解http://beej.us/guide/bgnet/examples/select.c (包含在下面以供参考)。 我这样做: :~$ cat /etc/issue Ubuntu 10.04 LTS \n \l :~$ gcc –version gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 :~$ wget http://beej.us/guide/bgnet/examples/select.c :~$ gcc select.c -o select :~$ echo “ff” | ./select A key was pressed! :~$ ./select TYPINGTYTimed out. :~$ cat /etc/issue Ubuntu 10.04 LTS \n \l :~$ gcc –version gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 :~$ […]

无需等待即可从用户那里获得输入 – C语言..!

我正在编写一个简单的计时器,它从00s到55s运行,然后再从00开始计数,并一直计数直到用户停止计时。 为此,我为用户提供了两个选项:1。启动和2.重置。 选择第一个运行程序,并选择第二个,因为我认为,将把计时器转为00s并保持在那里。 现在我面临的问题是我希望在不停止计时器的情况下从用户那里获得输入(即,在程序运行时允许用户随时输入2,这样他就可以停止正在进行的计数)。 我试图使用像getch()和scanf()这样的函数,但它们正在停止计时器,这完全破坏了程序。 任何帮助赞赏的人.. !!

我怎么去Flushing STDIN?

我有一个函数(在C中)从用户获取输入,(使用scanf)将它存储在unsigned int中,并将输入返回给处理它的其他函数: unsigned int input(void) { unsigned int uin; scanf(“%u”, &uin); return val; } 我想知道,因为我应该刷新标准输入,我想使用getc,vis-a-vis使用while循环: while (getc != ‘\n’) { … } 但是,我不确定如何: A)在getc中执行操作,就像我应该如何处理检查并将值连接到每个获得的字符,或者,无论我是否要getc,然后从那里连接,完全删除scanf。 B)这是否是最合适的方式。 有些善良的人可以给我一些提示和指示:) 谢谢。

在C中多次从stdin读取相同的数据

我正在C中编写一个基于跟踪文件的缓存模拟器,我想通过stdin将其导入程序。 这些跟踪文件最长可达150亿行,因此我不希望将它们存储在活动内存中的任何位置。 我想使用在程序输入中指定的配置文件,从一次调用中为不同的内存配置多次运行模拟。 程序调用应如下所示: cat | (trace file) ./MemorySimulator -f (config file) 现在,程序运行的方式是它使用配置文件来设置模拟的参数,然后使用scanf()从stdin读取格式化数据中的管道,直到它到达跟踪文件的末尾。 然后,它从配置文件进入下一个配置设置,并尝试再次从跟踪文件中读取数据。 此过程将继续,直到各种配置选项用尽为止。 我遇到的问题是,一旦我运行跟踪文件一次,我就无法再从配置文件中为以下内存配置捕获数据。 有没有办法在我的C程序中回收管道数据,以便我可以从单个程序执行多次运行模拟? 到目前为止,我还没有找到实现这一目标的方法。

C用户输入和链接列表

我试图从用户输入中获取一个字符串,然后将其与我之前在代码中创建的链接列表进行比较,并找到应该插入字符串的位置。 当用户输入任何内容并点击进入时停止循环。 我能够吸收字符串并找到要插入的位置,但我想要做的是循环直到用户输入空白输入。 这导致我的代码在某处破解,我不太清楚为什么。 我在我的代码中插入了断点来调试它,但我相信我遇到了fgets的问题。 任何帮助都会很棒。 当我说代码“中断”时,输出的样子是这样的: BREAK1: AAAA BREAK2 BREAK4 AAAA 0 BREAK5 字符串和位置是正确的,但它在多行上打印,然后继续循环而不重置。 以下是我的代码:: // NO FILE, SO INTAKE STRINGS /////////////////////////////////////////////////// /////////////////////////////////////////////////// else{ fgets(buff,BUFF_SIZE,stdin); buff[strlen(buff)] = ‘\0’; while (buff[0] != ‘\0’){ printf(“BREAK1: %s\n”, buff); // set curr = root node curr = root; printf(“BREAK2\n”); while (curr->next){ if (strcmp(buff, curr->stringDat) == 1){ insertPnt++; curr […]

将孩子的stdout传递给父母stdin

我尝试将子进程中的程序的stdout传递给父进程中的stdin。 在bash中,这将是这样的: wget“adress”|少 我的代码如下所示: int fd[2]; pid_t child_id; int status; char *args[] = {“wget”,”-O -“,argv[1], NULL}; int pipe(int fd[2]); child_id = fork(); if (child_id == -1) { printf (“Fork error\n”); } if (child_id == 0) { close(fd[0]); int c = dup2(fd[1],1); execl (“/usr/bin/wget”, “wget”, “-qO-“,argv[1], NULL); } else{ waitpid(child_id,&status,0); close(fd[1]); int c2 = dup2(fd[0],STDIN_FILENO); printf(“%i\n”,c2 […]

C:清除STDIN

基本上在每个printf之前的windows的代码块我有“fflush(stdin);” 哪个有效。 当我将我的代码复制到Linux时,它不起作用,也没有“fflush(stdin);”的替代方案。 我发现了。 无论我采用哪种方式,输入似乎都没有在缓冲区中清除,或者我的代码中的某些内容不正确。 #include #include #include #include int main() { char pbuffer[10], qbuffer[10], kbuffer[10]; int p=0, q=0, k=0; int r, i, Q, count, sum; char a[3]; a[0]=’y’; while(a[0]==’y’ || a[0]==’Y’) { printf(“Enter ap value: \n”); fgets(pbuffer, sizeof(pbuffer), stdin); p = strtol(pbuffer, (char **)NULL, 10); printf(“Enter aq value: \n”); fgets(qbuffer, sizeof(qbuffer), stdin); q = […]

如何使用select从stdin读取输入?

我试图使用select从stdin读取,之后我通过套接字将数据发送到服务器。 以下片段应遵循上述逻辑; 但它没有从stdin读取任何内容。 此外,它打印Enter command:用户第一次输入字符串后。 行printf(“%d %s\n”,__LINE__ ,buf); 也不打印任何东西。 fd_set rfds; struct timeval tv; int retval; char buf[BUFLEN]; while(1) { FD_ZERO(&rfds); FD_SET(STDIN_FILENO, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; retval = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv); if (FD_ISSET(STDIN_FILENO, &rfds)) { if (fgets(buf,BUFLEN, stdin)) { printf(“%d %s\n”,__LINE__ ,buf); if (strncmp(buf, “exit”, 4) == 0) […]

日期格式dd.mm.yyyy in C

我想知道是否有办法从控制台读取日期格式为dd.mm.yyyy格式。我有一个结构,其中包含日期信息。 我尝试了另一种结构只是为了日期,月份和年份: typedef struct { int day; int month; int year; } Date; 但点是个问题。 任何的想法?

如何在Eclipse CDT应用程序中分配输入文件而不是stdin?

我的应用程序是一个从命令行使用的简单可执行文件,并将stdin作为输入, stdout作为输出,因此它的行为与许多GNU工具一样。 为了测试它,我想设置一个Eclipse CDT DEBUG配置来将文件传递给stdin ,将另一个文件传递给stdout 。 我在DEBUG Configuration GUI中尝试了一些解决方案,但没有成功: 在Common / Standard Input and Output / Input File:我把inputfile.txt放在同一节Output file:我Output file: outputfile.txt 。 由于GUI指示工作目录是${workspace_loc:/myprogram} ,它应该没问题,但是当调试器启动时,它会发出警告: [Invalid file specified for console output: test/WittenACM87ArithmCoding-1.txt.coded] [Invalid file specified for stdin file: test/WittenACM87ArithmCoding-1.txt] 在Arguments我放了 outputfile.txt ,这显然不是为此设计的 当然,这两个文件都在工作目录中。 所有尝试都失败了ch = getc(stdin); 带有一些奇怪消息的代码行: Can’t find a source file at “/build/glibc-p3Km7c/glibc-2.24/io/../sysdeps/unix/syscall-template.S” Locate […]