0

我想编写一个程序,将字符串作为输入并返回编码字符串。编码字符串将是原始字符串中存在的每个字符都移动了几个固定位置的字符串。例如。假设字符串中的每个字符都移动了 2 个位置。所以如果用户输入'abcd',输出将是'cdef'。

我可以通过将整个字符串作为输入然后处理每个字符以给出最终输出字符串来做到这一点。

但我想要的是,一旦用户输入一个字符,它应该以其编码形式而不是其原始形式显示。

我为单个字符尝试了以下代码。

 char r;
    scanf("%c",&r);
    printf("\b%c",r+2);

但是用户仍然能够看到他输入的字符。除非我按“Enter”,否则不会出现编码字符。我该如何纠正这个问题?也许使用另一个函数来获取角色?任何帮助表示赞赏。

4

3 回答 3

2

如果您在 UNIX 上,您可以像这样更改终端的模式:

#include <stdlib.h>
#include <stdio.h>

int main( void ) {
    system( "stty -icanon 2>/dev/null" ); // this line sets the mode

    while( 1 ) {
        int c = getc( stdin ); // a simpler way to get character input
        printf( "\b%c", c + 2 ); // print the shifted value
    }
}

stty -icanon设置“规范输入”,这意味着您可以在输入的那一刻得到输入,而不是等待换行符(这很复杂,我不完全理解它所做的一切,但它具有正确的效果)。有关完整详细信息,请参阅man页面。据我了解,它设置了一种模式,其中单个字符足以返回输入,而不是等待换行符。您也可以使用min N更改它以等待 2 个或更多字符,或者time N在放弃之前仅等待特定时间(以十分之一秒为单位)。

2>/dev/null是重定向stderr到的常用语法/dev/null,仅表示“忽略任何错误”。

在 Windows 上,这不起作用,您应该getch按照已经建议的方式使用。

最后,您的密码有点奇怪;输入yandz将产生{and |!

于 2013-08-24T14:45:33.170 回答
0

如果您使用的是 MSVC,则可以使用getch(). #包括

// You don't need type "Enter" key
char ch = getch();

如果你没有使用 MSVC,你可以参考这里:How to Avoid press enter with any getchar()

于 2013-08-24T13:59:59.520 回答
0

我在我的Borland Turbo C++(平台:Windows)上编译并运行了您的代码,它为输入“a”提供了输出“c”。我不知道您的问题出在哪里或您在哪个平台上编码。

如果您正在寻找 C 中字符输入的替代函数,那么下面给出的很少:

获取():

标题: conio.h

描述:从控制台取一个字符作为输入,返回变量而不在屏幕上回显。它不会等待'enter'用户继续下一行

句法: char ch = getch();

getche():

标题: conio.h

描述:服务方式与 相同getch(),但唯一的区别是它在屏幕上回显输入的字符。

句法: char ch = getche();

获取字符():

标题: stdio.h

描述:它是一个宏getc(stdin)。为简单起见,它还将一个字符作为来自控制台的输入并返回到变量。它与屏幕上的字符相呼应,用户必须按下enter才能进行下一个操作。

句法: char ch = getchar();

我希望,它会帮助你。

试试下面的代码:

#include<stdio.h>
#include<conio.h>
void main()
{
    char ch = getch();
    printf("%c", ch);
}
于 2013-08-26T17:05:20.057 回答