我创建了一个自动输入机器人,它模拟用户给出的字符串字符。
我的代码是:
printf("Enter speed (wpm) (1 to 11750):");
scanf("%d", &speed);
if(speed < 1 || speed > 11750)
{
printf("\nPlease provide CORRECT DATA\n");
return -1;
}
printf("Paste the String : \n");
gets(exaArray);
exaArrayLength = strlen(exaArray);
relation = (int)11750/speed;
printf("typing will start in 2 sec-\n");
Sleep(2000);
i=pos=0;
while(i<=exaArrayLength)
{
Sleep(relation);
if((exaArray[pos]>96) && (exaArray[pos]<123)) //small letters
{
keycode=0x41 + (exaArray[pos]%97);
smallLetter(keycode); //function for key simulation
}
.....
我正在使用gets函数进行输入。当我粘贴不包含Enter的文本时,此程序工作正常。所以这个程序适用于一个段落。 但是如果用户提供了多个段落,那么它只模拟第一段。
因为gets
终止于'\ n'。哪个函数可以进行多段输入并将其分配给字符串。
答案 0 :(得分:3)
这实际上是一个非常困难和复杂的问题,并且不容易以自动方式解决。
看起来在循环中读取将是一个很好的解决方案,但是当没有更多输入并且读取功能仅阻止等待更多输入时,您就会到达这一点。最简单的方法是让用户输入&#34;文件结尾&#34;组合键( CTRL-D 在POSIX系统上,如Linux或OSX, CTRL-Z 在Windows上),但必须告诉用户这样做。
问题源于您的程序根本不知道预期会读取多少数据,并且当用户认为&#34;&#39时,基本上没有能够读取用户头脑的功能。是的,没有更多的数据&#34;。
除了让用户给出&#34;文件结尾的上述解决方案之外,您可以使用其他序列或特殊键甚至输入短语来标记结尾,但这一切都归结为:在循环中读取输入,直到用户说“不再输入&#34;。
”答案 1 :(得分:2)
好吧,计算机无法在用户按Enter和包含换行符的“粘贴”字符串之间产生差异。 (从技术上讲,将某些东西粘贴到控制台就像打字一样。)
如果你只是不希望问题在一个段落之后退出但是继续,你可以按照建议的方式建议(循环阅读功能) - 然后你需要Ctrl + C退出程序然后那里在技术上仍然是一次写一个段落。取决于你对该计划还想做些什么。
另一方面,如果您想要一种方法让用户一次输入所有文本然后再处理它,您需要将“换行”之外的内容定义为“输入结束”标记,例如某些内容喜欢ESC。
您可以使用getchar
代替gets
并手动将以这种方式输入的每个字符串联到字符串缓冲区,并且字符的值为27
(转义)例如,你将结束输入循环并开始输出。