繁体   English   中英

编码C字符串。

[英]Encoding a C string.

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

我能够通过将整个字符串作为输入然后处理每个字符来给出最终输出字符串。

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

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

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

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

如果您使用的是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

最后,你的密码有点奇怪; 输入yz将产生{|

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

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

如果你没有使用MSVC,你可以参考这里: 如何避免按任何getchar()输入

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

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

残培():

标题: conio.h

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

语法: char ch = getch();

getche():

标题: conio.h

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

语法: char ch = getche();

getchar函数():

标题: stdio.h

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

语法: char ch = getchar();

我希望,它会对你有所帮助。

试试下面的代码:

#include<stdio.h>
#include<conio.h>
void main()
{
    char ch = getch();
    printf("%c", ch);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM