我有一个任务是在一行中读取给定的数字,用控制台的空格分隔.
当我在一个单独的行上读取每个数字时我知道怎么做(Console.ReadLine()但是当数字在同一行时我需要帮助.
最近我写了一个小的CLI脚本,需要重复从控制台读取日期(计算的日期数量计算,每次都可能不同).示例Ruby代码为您提供了以下想法:
dates = x.times.collect { print "Enter date: "; Date.parse(gets.chomp) }
Run Code Online (Sandbox Code Playgroud)
只是它的心里很不舒服,我用Clojure写的剧本,彼时使用一些相当丑陋的代码swap!和loop...recur.我想知道在Clojure中达到预期效果最干净的方法是什么.(Clojure确实有dotimes,但它不会保留评估正文所返回的值......正如强调纯函数式编程的语言所预期的那样.)
如果这个琐碎的问题已经得到解答,请道歉,我在SO处找不到它.使用此Java简单代码(Windows 7和Eclipse Kepler)从IDE控制台读取行:
int v;
try { while ((v = System.in.read()) != -1) System.out.println(v); }
catch (IOException e) { ; }
Run Code Online (Sandbox Code Playgroud)
用户如何使值v等于-1?(我试过Ctrl+ d- z- x- c- s- e和其他键不重复的行为,但循环随机打断)
getchar() 和 putchar() 的原型是:
int getchar(void);
int putchar(int c);
正如它的原型所示,getchar() 函数被声明为返回一个整数。但是,您可以将此值分配给一个 char 变量,就像通常所做的那样,因为该字符包含在低位字节中。(高位字节) -order 字节通常为零。)
与 putchar() 的情况类似,即使它被声明为采用整数参数,您通常也会使用字符参数调用它。只有其参数的低位字节实际输出到屏幕。
我正在研究控制台 I/O 并遇到了这个问题。高位字节和低位字节是什么意思?
在上述上下文中它是什么意思?
当我在K&R上练习时,我发现了一个非常有趣的问题:
代码如下:
include <stdio.h>
main()
{
int c;
int bn;
bn=0;
while((c=getchar())!=EOF)
{
if(c==' ')
bn++;
}
printf("blanks counter:%d\n",bn);
}
Run Code Online (Sandbox Code Playgroud)
代码函数是统计空白的数量
我一次输入所有单词,没有使用退格键,就完成了.
$ ./a.out
I have a dream
blanks counter:3
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用退格键,输入过程中会发生什么?
我推测当按下空格键时,getchar()函数应该得到这个事件,然后执行bn ++,所以即使我后来按退格键删除这个空白空间,bn变量的值也不会改变.但实践的结果与我的推测不同,实践的程序如下:
第一步:输入第一个空格

第二步:使用退格键删除空白空间
第三步:完成剩余的字符输入

为什么结果是3而不是4?为什么bn变量的值会被按下退格键改变?
请给我一些想法,谢谢!
我知道这是一个奇怪的问题,但是有没有办法从控制台读取以前的输入?
就像是:
The fox is brown // line 1
The duck is yellow // line 2
Here where the control is right now_ // but I want to read line 2
Run Code Online (Sandbox Code Playgroud)
PS:我正在使用窗户
在我的汇编程序中,我AllocConsole从kernel32库中调用,但是我不知道如何从分配的控制台获取输入.是否有任何winapi包含的函数将从当前程序中的已分配控制台获取输入?
CALL AllocConsole
Run Code Online (Sandbox Code Playgroud)
所有的功能,如ReadConsole都需要一个输入缓冲区,我不知道如何为我分配的控制台获取输入缓冲区,更不用说该功能是否能满足我的需求.
总而言之,winapi中是否有一个函数可以从程序中分配的控制台获取输入?
谢谢