c-如何输入包含'n'在里面



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

我的代码是:

    printf("Enter speed (wpm) (1 to 11750):");
    scanf("%d", &speed);
    if(speed < 1 || speed > 11750) 
    {
        printf("nPlease provide CORRECT DATAn");
        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
        }    
        .....

我正在使用get函数获取输入。当我粘贴不包含Enter的文本时,这个程序运行良好。所以这个程序只需一段就能很好地工作。但是,如果用户提供了多个段落,那么它只模拟第一个段落。

因为gets终止于'\n'。哪个函数可以接受多个段落输入并将其分配给一个字符串。

这实际上是一个非常困难和复杂的问题,不容易以自动化的方式解决。

循环阅读似乎是一个很好的解决方案,但当没有更多输入时,阅读功能就会阻止等待更多输入。最简单的方法是让用户输入"文件结尾"组合键(在Linux或OSX等POSIX系统上CTRL-D,在Windows上CTRL-Z

这个问题源于你的程序根本不知道它应该读取多少数据,而且当用户认为"就这样,没有更多的数据"时,根本没有一个功能能够读取用户的想法。

除了上面让用户给出"文件结束"的解决方案外,你还可以使用其他序列或特殊键,甚至输入短语来标记结束,但归根结底:循环读取输入,直到用户说"不再输入"。

好吧,计算机无法区分用户按回车键和"粘贴"的包含换行符的字符串。(从技术上讲,把东西粘贴到控制台就像打字一样。)

如果你只是不想让问题在一段之后退出,而是继续,你可以按照评论者alk的建议来做(循环阅读功能)——然后你需要Ctrl+C退出程序,从技术上讲,一次只写一段。这取决于你进一步想对程序做什么。

另一方面,如果您想让用户一次输入所有文本,然后再进行处理,则需要将"换行符"以外的内容定义为"输入结束"标记,例如类似ESC的内容。

要做到这一点,可以使用getchar而不是gets,并手动将以这种方式输入的每个字符连接到字符串缓冲区,例如,如果字符的值为27(转义键),则可以结束输入循环并开始输出。

相关内容

  • 没有找到相关文章

最新更新