Tag: stdin

C在提交之前读取stdin缓冲区

很可能这种情况是不可能的,因为我没有发现这种行为记录在任何地方,但很奇怪,如果有人有任何技巧来完成这样的事情。 在用户实际点击enter以提交数据之前,是否可以确定程序的stdin缓冲区的内容? 我正在尝试这样做,因为我已经构建了一个简单的终端聊天程序,它将消息从一个终端发送到另一个终端以便于通信。 我们遇到的问题是,由于传入的消息和传出消息一起出现在终端中,如果用户在从另一端收到消息时键入消息,则会扭曲显示并在新的结尾处附加键入的消息收到消息。 如果有办法检查缓冲区的内容并采取相应的行动会很方便,但我不确定如果没有gui类型的接口级别,这是否可行。

c等待stdin读?

在我的应用程序中,我试图实现这样的事情: 我有: 数据0,数据1,数据2,…数据n。 一些参数传递 流: 使用一些参数启动程序并将数据0写入stdin 程序根据传递的数据“数据0”和参数进行计算 “等待”新的stdin和(清除旧的stdin,缓冲区和变量?) 当我输入数据1,数据2 ……等时重复1~2 当到达数据n时,终止(或者如果我输入一个中止代码到stdin告诉程序终止)。 也许是这样的?(伪代码): int main(int argc, char *argv[]) { get parameters(); int fslen = data size char *c = (char *)malloc(fslen); fgets(c, fslen, stdin); while((c != null) || (c != Terminate code?)) { do calculations with int c; clear c; } return 0; } 或者他们是一个更好的方法? 或者这样做是不好的做法? […]

查看输入缓冲区,并刷新C中的额外字符

如果我想在C中接收一个字符输入,我将如何检查是否发送了额外的字符,如果是,我将如何清除它? 是否有一个像getc(stdin)一样的函数,但它不会提示用户输入一个字符,所以我可以把while(getc(stdin)!=EOF); ? 或者是一个查看缓冲区中下一个字符的函数,如果它没有返回NULL(或者其他任何东西),我可以调用一个(nother)函数来刷新stdin? 编辑 所以现在,scanf似乎正在做的伎俩,但有没有办法让它读取整个字符串,直到换行? 而不是最近的空白? 我知道我可以将“%s%s%s”或其他任何内容添加到格式字符串中但是我可以处理任意数量的空格吗?

子程序不会在C程序中死亡

我正在编写一个C程序,它将STDIN中的输入解析为单词,生成由numsorts变量指定的多个排序进程,以循环方式将单词排序到每个排序进程,并发送排序的输出到STDOUT。 如果指定的排序进程的数量为1,我的程序将按照需要工作并干净地退出,但如果排序进程的数量大于1,则排序子进程不会死,并且我的程序会等待它们。 对我来说,最奇怪的部分是,如果我打开一个单独的终端窗口并杀死除1以外的所有孩子,最后一个孩子会立即自行死亡并且程序干净利落。 这是我的解析器代码(管道文件描述符存储在一个二维数组中): void RRParser(int numsorts, int **outPipe){ //Round Robin parser int i; char word[MAX_WORD_LEN]; //Close read end of pipes for(i = 0; i < numsorts; i++){ closePipe(outPipe[i][0]); } //fdopen() all output pipes FILE *outputs[numsorts]; for(i=0; i < numsorts; i++){ outputs[i] = fdopen(outPipe[i][1], "w"); if(outputs[i] == NULL) printf("Error: could not create output stream.\n"); } […]

关于while(!EOF)的问题

我从stdin读取值,我想继续阅读文件,直到我完成阅读,所以我正在使用 while(!EOF){ scanf(…) } 但是,代码片段似乎没有做任何事情, while(!EOF){ scanf(“%d %d %d %d”, &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth); printf(“—imageWidth=%d imageHeight=%d safeRegionStart=%d safeRegionWidth=%d—\n”, imageWidth, imageHeight, safeRegionStart, safeRegionWidth); totalP = imageWidth * imageHeight ; totalSafeP = imageHeight * safeRegionWidth; printf(“—total # of pixels: %d Total # of safe Pixels: %d—\n\n”, totalP, totalSafeP); i=1; while(i!=totalP) { i++; scanf(“%d”, &pixel); printf(“\nValue of pixel […]

C – 使用poll在socket(s)和stdin之间进行多路复用 – 服务器

我正在编写一个客户端服务器应用程序,我正在使用poll来在多个客户端套接字和stdin之间进行多路复用,我可以在其中插入命令(例如:停止服务器)。 我相信我的代码的结构(“逻辑”)是正确的,但它的行为并不像我期望的那样: struct pollfd pfd[NSERVER]; //defined as 10 pfd[0].fd = fileno(stdin); pfd[0].events = POLLIN; pfd[1].fd = socktfd; //server bind, listen socket pfd[1].events = POLLIN; struct sockaddr_storage remoteaddr; // client address socklen_t addrlen; char remoteIP[INET6_ADDRSTRLEN]; addrlen = sizeof remoteaddr; char buf[1024]; // buffer int pos=2; while(poll(pfd,1,0) >= 0) { if(pfd[0].revents & POLLIN) { //stdin //process input […]

scanf on非STDIN输入

是否可以在输入上运行scanf ,它不是STDIN? 我的意思是如果我有一个string=”hello 1 2 3″ ,我可以在它上面运行scanf来提取字符串和三个整数吗? 还有其他function可以做到这一点吗?

使用C Readline从文件而不是stdin读取一行

我正在使用gcc -lreadline的readline来读取stdin。 后来,我想从一个文件中读取,所以我尝试了以下内容,但它仍然暂停并接受来自命令提示符的输入,而不是从文件中接受它。 这种方法有解决方法吗? FILE* savedStdin = stdin; stdin = fopen(“someFile.txt”, “r”); char* input = readline(NULL); stdin = savedStdin;

如何阅读C中的管道内容?

我希望能够做到这一点: $ echo “hello world” | ./my-c-program piped input: >>hello world<< 我知道应该使用isatty来检测stdin是否是tty。 如果它不是tty,我想读出管道内容 – 在上面的例子中,那是字符串hello world 。 在C中这样做的推荐方法是什么? 这是我到目前为止所得到的: #include #include int main(int argc, char* argv[]) { if (!isatty(fileno(stdin))) { int i = 0; char pipe[65536]; while(-1 != (pipe[i++] = getchar())); fprintf(stdout, “piped content: >>%s<<\n", pipe); } } 我使用以下方法编译: gcc -o my-c-program my-c-program.c 它几乎可以工作,除了它似乎总是在管道内容字符串的末尾添加一个U + […]

从stdin读取fgets时,为什么忽略第一个字符串?

可能重复: Dev-C ++输入被跳过 我试图使用fgets从stdin读取一个字符串数组,但我想要读取的第一个字符串总是被忽略。 是什么导致了这个问题? #include int main() { int i; struct material { char name[30]; float price, kg; }; unsigned m,nr; printf(“Lorry capacity=”); scanf(“%u”, &m); printf(“Number of materials=”); putchar(‘\n’); scanf(“%u”, &nr); struct material list[nr]; for (i=0; i<nr; i++) { printf("Name="); fgets(list[i].name, 30, stdin); } putchar('\n'); for (i=0; i<nr; i++) { printf("%s ", list[i].name); } […]