我正在写信,尽可能理解我尝试计算的以下程序,因为我认为它在日常生活中可能有一些应用。
这个程序是这样的(它是一个密码):
如您所见,我正在尝试根据输入的某个常量来移动字母表。
我还不太理解并且也不太清楚的是,为什么程序如果没有scanf或getchar就不能正常运行,并且两者在同一个值上都是必需的,比如这里:
我认为这两个函数完全等价;实际上在互联网上搜索,我发现关于
我发现:
这个程序是这样的(它是一个密码):
#include <stdio.h>
void cifrario(int k) {
char b, d;
scanf("%c", &d);
d = getchar();
putchar(d);
scanf("%c", &b);
b = getchar();
while (b != d) {
if (('A' <= b && b <= 'Z') || ('a' <= b && b <= 'z')) {
b = b + k;
printf("%c", b);
scanf("%c", &b);
b = getchar();
} else
printf("%c", b);
}
}
int main() {
int h;
scanf("%d", &h);
cifrario(h);
return 0;
}
如您所见,我正在尝试根据输入的某个常量来移动字母表。
我还不太理解并且也不太清楚的是,为什么程序如果没有scanf或getchar就不能正常运行,并且两者在同一个值上都是必需的,比如这里:
scanf("%c", &d);
d = getchar();
我认为这两个函数完全等价;实际上在互联网上搜索,我发现关于
getchar
的内容如下:
这就是我期望该函数返回读取的字符作为
unsigned char
强制转换为int
或在文件结束或错误时返回EOF
。
scanf()
所做的。我发现:
如果我将所有字符都不带空格地输入,我得到的结果(我认为)只是同一个字符的移位而已,而不是两个字符。
while
中的else
没有按预期工作,因为一旦我输入了一个非字母字符并查看结果,输出就会失败并进入无限字符串。
scanf()
进行换行符管理非常麻烦。建议停止使用scanf()
获取用户输入,改用fgets()
(可能跟随着sscanf()
)。 - pmggetchar()
的返回类型是int
,而你正在使用char
类型的变量来保存它的返回值。 - H.S.fgets()
允许从错误的用户输入中恢复,并使得管理输入行(包括尾随的'\n'
)变得自然。 - pmggetchar()
的返回类型是int
,因为它在失败时返回EOF
。 - H.S.