How to input of a string which contain '\n' in it
我创建了一个自动打字机器人,它模拟用户给出的字符串字符。
我的代码是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | printf("Enter speed (wpm) (1 to 11750):"); scanf("%d", &speed); if(speed < 1 || speed > 11750) { printf("\ Please provide CORRECT DATA\ "); return -1; } printf("Paste the String : \ "); gets(exaArray); exaArrayLength = strlen(exaArray); relation = (int)11750/speed; printf("typing will start in 2 sec-\ "); 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 的文本时,该程序运行良好。所以这个程序适用于一个段落。
但是如果用户提供了多个段落,那么它只模拟第一段。
因为
\\'。哪个函数可以接受多个段落输入并将其分配给一个字符串。
这实际上是一个非常困难和复杂的问题,并且不容易以自动化的方式解决。
循环读取似乎是一个很好的解决方案,但是当您没有更多输入并且读取功能只是阻塞等待更多输入时,您会遇到这种情况。最简单的方法是让用户输入"文件结尾"组合键(在 Linux 或 OSX 等 POSIX 系统上为 CTRL-D,在 Windows 上为 CTRL-Z),但随后必须告知用户这样做那个。
问题源于您的程序根本不知道它应该读取多少数据,并且基本上没有功能能够在用户认为"就是这样"时读取用户的想法,没有更多数据"。
除了让用户给出"文件结尾"的上述解决方案之外,您还可以使用其他序列或特殊键甚至输入短语来标记结尾,但这一切都归结为:读取输入一个循环,直到用户说"不再输入"。
好吧,计算机无法区分用户按下回车键和包含换行符的"粘贴"字符串。 (从技术上讲,将某些内容粘贴到控制台中就像键入它一样。)
如果您只是不希望问题在一段后退出但继续,您可以按照评论者 alk 的建议进行操作(循环阅读功能) - 然后您需要 Ctrl C 退出程序然后在那里从技术上讲,仍然是一次写一段。取决于您想进一步使用该程序做什么。
另一方面,如果您希望用户一次输入所有文本然后再对其进行处理,则需要将 "newline" 以外的其他内容定义为 "end of input" 标记, 例如像 ESC.
您可以通过使用