在这里,我试图从用户中获取整数,在输入正确时循环循环. 输入非整数值(例如" dsdfgsdg")cin.fail()返回true,如预期的,而循环主体开始执行. 在这里,我使用cin.clear()重置CIN的错误标志; cin.fail()如预期的那样返回错误. 但是下一个致电CIN不起作用,并将错误标志设置为重新设置. 有什么想法吗? #include using namespace std; int main() { int a; cin >> a; while (cin.fail()) { cout > a; } } 解决方案 cin.clear()之后,您要这样做: #include //std::streamsize, std
以下是关于 input 的编程技术问答
我想知道我如何在一行上接受多个数字而不预先知道多少. 因此,例如,如果我有1 2 3 4作为输入,则可以使用: std::cin >> a >> b >> c >> d; 但是,如果我不知道金额是4,那么我将无法使用该方法.将输入存储到向量的正确方法是什么? 解决方案 您可以读取所有输入,直到类型std :: String对象中的新行字符,然后从此字符串中提取数字,例如将它们放在向量中. 这里准备使用示例 #include #include #include #include #include int main() { std::string s; std::getline( std::cin, s ); std::istringstream is( s ); std::vector v( ( std:
我与Java建立了一个命令行聊天客户端,该客户端将STDIN的消息发送到服务器,并同时接收到从服务器到STDOUT的消息.您可能会在您写一条消息时发送一条消息,因此我希望终端的底线总是保留用于输入,因此输出出现在其上方. 希望您理解我的问题,如果您不这样做,我会提前道歉. 解决方案 JCurses库将完全执行您需要的事情. http://sourceforge.net/project/projects/javacurses/javacurses/ 这是 *NIX操作系统的Ncurses的Java实现.在Windows上,您需要包含.dll文件,在大多数Linux发行版中,除了将jar包含在类路径中,您无需做任何事情. 您需要库来构建"命令行GUI"的原因是因为标准Java无法以这种方式操纵本地命令行.这很可能是由于Java不是为特定平台构建的 - 但这只是一个猜测.
我编写了一个简单的程序,该程序捕获并执行命令行Python脚本,但是存在问题.尽管我的程序捕获了Stdout,但该文本传递给Python输入功能并未写入我的程序. 例如: Python脚本: import sys print("Hello, World!") x = input("Please enter a number: ") print(x) print("This work?") 会写"你好,世界!"然后停下来.当我通过一个数字时,它将继续写入"请输入号码:3".到底是怎么回事?有解决方案吗?我的C#如下: public partial class PyCon : Window { public string strPythonPath; public string strFile; public string strArguments; private StreamWriter sw;
***我没有很好地解释这一点,因此希望此编辑更有意义:基本上,我必须编写适用于大量测试用例的代码,下面的输入只是一个示例.所以我无法手动输入我的功能 说我有以下输入: 0 4 0,2,2,3 我需要生成某种输出,例如 1 我该怎么做? 我的意思是,如果我通常会出现问题,我只能定义一个函数然后手动输入值,但是如何读取原始数据(对数据执行一系列函数/操作)? (对于分配,我应该在stdin上接收输入 - >并在stdout上打印正确的输出 解决方案 stdin只是由sys.stdin表示的文件(或类似文件的对象);您可以将其视为普通文件并从中读取数据.您甚至可以迭代它;例如: sum = 0 for line in sys.stdin: item = int(line.strip()) sum += item print sum 或只是 entire_raw_data = sys.s
我当前正在编程一个简单的计时器,该计时器从00到55s,然后从00开始,并继续计数直到用户停止它.为此,我为用户做出了两个选择:1.启动&2.重置.选择一号运行该程序,并按照我的想法选择第二个,将计时器转换为00s并将其保存在那里. 现在,我面临的问题是我想从用户中获取输入而不会停止计时器(即使用户能够在程序运行时随时输入2,以便他可以停止正在进行的计数).我尝试使用诸如getch()和scanf()之类的函数,但是它们正在停止计时器,这完全破坏了程序. 任何帮助的人都赞赏.. !! 解决方案 您可以使用ncurses来实现这一目标.在Windows上,可以使用kbhit()和getch() 进行类似的事情 #include #include #include #include #include #include #include
基本上,在每个printf之前,在Windows的CodeBlock中,我都有" 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 a p value: \n");
我有一个用Python编写的控制台程序.我想在自动测试例程中测试几种输入组合.输入通过Pythons input(...)函数读取. 如何模拟键盘或任何其他输入流将单个字符或字符串发送到input? 或我需要用另一个功能替换输入,该功能连接到我的测试用例? 解决方案 如果这只是测试案例,而不是"大系统的实际部分" - 这意味着您只需要将某个输入传递到命令行可执行文件(例如运行测试),而您正在使用UNIX ,一种方便的方法是使用// read.py val = raw_input() print 'nice', val 然后通过控制台: $ echo "hat" | python read.py nice hat 在Windows语法上是dir> python.exe read.py
我有一个函数(在C中),该函数从用户获取输入,(使用SCANF)将其存储在无符号的int中,并将输入返回到处理它的其他功能: unsigned int input(void) { unsigned int uin; scanf("%u", &uin); return val; } 我想知道,当我应该冲洗stdin时,我想使用getC,vis-a-vis使用一段时间循环: while (getc != '\n') { ... } 但是,我不确定如何: a)在GETC内部进行操作,就像我应该如何处理支票并串联值,每个字符获得的价值,或者是我是否要getC,然后从那里加入,然后完全删除scanf. b)这是否是执行此操作的最合适的方法. 可以给我一些提示和指针:) 谢谢. 解决方案 我会将%*[^\n]添加到scanf格式字符串的末端. *意味着它应该读取但忽略匹配输入,而[^\n]则意味着除了新线,就像在正则
我有一个我从中读过的文件,它包含一堆线,每个线都有不同数量的整数,我很难将其分配到Ints的向量. 的向量. 这是我当前的代码. std::vector read_line() { std::vector ints; int extract_int; while((const char*)std::cin.peek() != "\n" && std::cin.peek() != -1) { std::cin >> extract_int; ints.push_back(extract_int); } return ints; } std::vector > read_lines() { freopen("D:\\test.txt", "r", stdin); freopen("D:\\test2.txt", "w", stdo
我正在看一下Rust,并决定构建一个小程序,该程序将用户的输入进行打印并打印出来,但也想用它做一些数学工作.目前,这就是我接受用户输入的方式: let mut number = String::new(); let input = io::stdin().read_line(&mut number) .ok() .expect("Failed to read line"); println!("You entered {}", number); 但是,尽管我确实以这种方式获得了正确的输入,但货物给了我以下警告: src/main.rs:10:9:10:14警告:未使用的变量:input,#[warn(unused_variables)]在默认情况下 src/main.rs:10让输入= reader.read_line(&mut编号) 如果我只使用input变量,那么无论我输入什么号码,我都会在打印号码时获得" 2". 如何避免警告?
我只是在学习python3时感到好奇,但在网络上没有找到任何很好的解释,这也不是我的问题. 读取有关输入()的读取"从stdin中读取",所以我认为我可以尝试并尝试使用它来从管道上读取.而且确实如此!但是只有一条线(直到eol).因此,下一个出现的问题是 如何使用输入()? 从管道(stdin)读取多条线 我找到了sys.stdin并使用sys.stdin.isatty()来确定stdin是否绑定到TTY,假设如果不绑定到TTY,则数据将来自管道.因此,我还找到并成功使用了Sys.stdin.readlines()来读多行. ,但仅出于我的好奇心,是否有一种方法可以通过使用普通输入()函数来实现相同的方法?到目前为止 对不起,如果这一切对您没有意义. 这是我到目前为止的实验代码,没有输入(): import sys if sys.stdin.isatty(): # is this a keyboard? print( "\n\nSorry!
我想知道如何检查我的输入缓冲区(也许称为stdin)是否为空. 我不希望该程序停止,如果缓冲区为空,并且我不希望输入一定会以\n结尾,因此仅使用scanf是不够的. 我尝试在Google上和该网站上搜索,但没有足够的答案. 我尝试使用feof(stdin)这样: int main() { char c,x; int num; scanf("%c",&c); scanf("%c",&x); num=feof(stdin); printf("%d",num); } 但是,无论输入如何,它都在打印0.在第二个SCANF后添加fflush(stdin)给出相同的结果. 使用选择和民意调查建议的其他答案,但我找不到有关这些功能的任何解释. 其他一些论坛告诉我使用getchar(),但我认为他们误解了我的问题. 如果您建议我使用Select/Coll,请您添加有关如何使用这些的说明吗? 解决方案 这是解决此问题的代码
python3's input()似乎在两个调用input()的调用之间接收旧的std输入.有没有办法忽略旧输入,仅采用新输入(input()被调用后)? import time a = input('type something') # type "1" print('\ngot: %s' % a) time.sleep(5) # type "2" before timer expires b = input('type something more') print('\ngot: %s' % b) 输出: $ python3 input_test.py type something got: 1 type something more got: 2 解决方案 您可以在第二个input()之前冲洗输入缓冲区,例如So import time import sys from termios import tcflush, TCIFLUSH a = i
#include void main(){ char str[100]; char letter; letter=getchar(); printf("%c",letter); gets(str); //Rest of code } 执行时,代码跳过了get(str)行.但是,当我用scanf替换时,它可以正常工作.为什么这不起作用的具体原因? 我正在使用GCC 4.7.2. 解决方案 第一个呼叫GetChar()在输入缓冲区中留下了一个newline字符.下一个呼叫gets()考虑了newline作为输入的结尾,因此不在等您输入. 使用另一个getchar(). 消耗newline字符 ... letter=getchar(); getchar(); // To consume a newline char left printf("%c",letter); fgets(str, sizeof str, stdi
如果我想在C中收到一个字符输入,我将如何检查是否发送了额外的字符,如果是,我该如何清楚? 是否有像getC(stdin)这样的函数,但是不会提示用户输入字符,所以我可以放置while(getc(stdin)!=EOF);?或一个可以窥视缓冲区中的下一个字符的函数,如果它不返回null(或其他任何内容),我可以调用flush stdin的(nother)函数? 编辑 现在,SCANF似乎正在解决问题,但是有没有办法让它阅读整个 string,直到newline?而不是到最近的白道?我知道我只能将"%s%s%s"或任何内容放入格式字符串中,但是我可以处理任意数量的空间吗? 解决方案 您无法冲洗输入流.如果这样做,您将调用未定义的行为.最好的选择是: int main() { int c = getchar(); while (getchar() != EOF); return 0; } 使用scanf魔术: #include
我有此代码: fn main() { let mut stdin = io::stdin(); let input = &mut String::new(); loop { input.clear(); print!("Your age: "); stdin.read_line(input); print!("{}", input); } } 因此,当我输入某些内容时,程序会返回"您的年龄:"加上我的输入. 但是,当我运行程序时,我不想在新行中写入输入. 要在Python中做类似的事情,我可以写: var = input("Your age: ") 如何避免进入新线路?我敢肯定这很简单,但我真的无法意识到该怎么做,我尝试了很多不同的东西... 解决方案 您需要在阅读行之前冲洗stdout: use std::io::{self, Write}; fn ma