- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为阿姆哈拉语(埃塞俄比亚广泛使用的语言之一)编写一个简单的凯撒实现。这是代码
main(){
setlocale(LC_ALL, " ");
int i, key=0;
wchar_t message[20];
wprintf(L"Enter message:>");
fgetws(message, sizeof(message), stdin);
wprintf(L"Enter cipher key:>");
wscanf(L"%d", &key);
/* basic input validation goes here */
for(i=0;message[i]!='\0'; i++){
message[i]=message[i]+key;
}
wprintf(L"The cipher is: %ls", message);
wprintf(L"\n");
return 0;
}
代码编译时没有警告。如果 key 小于或等于 5,则工作正常。当 key value 为 6 及以上时,问题就会出现。据我测试,它会打印一个额外的字符。我通过 gdb 运行它,看看它在哪里获取了额外的字符。但没有多大意义。这是我的问题:
如果有帮助的话,我的机器上的 wchar 大小是 4 字节。
谢谢
编辑:
示例输入:
message: ተደለ
key: 6
output: ቶዶሎ 0010
output I expect ቶዶሎ
0010 的显示方式与 Unicode 表中没有相应符号的字符类似。
再次感谢。
最佳答案
您看到的额外字符是宽字符换行符 (0x000a
),它保留在您使用 fgetws
读取的字符串末尾,并且移位 6字符,结果为 0x0010
。这似乎不是可打印的字符,终端决定将字符代码打印为纯十六进制数字。
在移动之前删除尾随换行符或仅移动可打印字符。
关于c - 用 C 语言实现简单凯撒密码的 wchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21545477/
我刚刚开始学习 C 语言类(class),并且遇到了命令行参数的问题。分配是这样的(还有更多,但这是开头有关命令行参数的部分): - 你的程序必须接受一个命令行参数,一个非负整数。 - 如果您的程序在
我需要检查命令行参数中是否有非数字字符。例如: ./problem 20x 应该打印出“不是数字”,因为它包含一个 x。我的代码似乎没有循环遍历命令行参数中的所有字符。 我基本上尝试了不同类型的循环,
这里我有从标准输入将字符流输入到数组中的代码。然后将该数组转换为二维数组。然后,它将该数组从行列顺序更改为列行顺序。然后它打印出创建凯撒移位加密的新数组。我遇到的问题是我的数组开始使用第二个用户输入的
我有点被这个问题困住了。当我运行程序时,由于某种原因,循环经过 z 的所有字母都不会打印。问题来自这个链接:http://docs.cs50.net/2016/x/ap/problems/caesar
我是一名优秀的程序员,十分优秀!