如何输入包含'\ n'的字符串

时间:2016-05-03 11:34:05

标签: c user-input

我创建了一个自动输入机器人,它模拟用户给出的字符串字符。

我的代码是:

    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'。哪个函数可以进行多段输入并将其分配给字符串。

2 个答案:

答案 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(转义)例如,你将结束输入循环并开始输出。