【发布时间】:2018-02-17 05:36:28
【问题描述】:
我正在构建一个程序,该程序接受用户输入、对其进行操作并输出更改(如果有)。指导方针是:
- 删除所有数字
- 如果 > 连续 2 个换行符,则仅打印 2 个
- 改变字母大小写
- 每个空格打印 2 个空格
- 正常打印所有其他字符
- 如果标准输入和标准输出相同,则从 main 返回 1,否则返回 0。
我不能为这个项目使用任何数据结构,所以我使用 getchar() 逐个字符地读取 stdin 字符。
有什么方法可以将标准输入与 C 中的标准输出进行比较?我是这门语言的新手,甚至不知道如何研究这个。我的所有准则都满足 sans 6 的代码如下:
#include <stdio.h>
int newline(int iochar);
void testChars(int iochar);
void upperCase(int iochar);
void lowerCase(int iochar);
void space(int iochar);
void digit();
int main()
{
int iochar = 0;
iochar = getchar();
testChars(iochar);
return 0;
}
void testChars(int iochar)
{
while(iochar != EOF) {
if (iochar == 10)
iochar = newline(iochar);
else if(iochar == 32)
space(iochar);
else if (iochar > 64 && iochar < 91)
upperCase(iochar);
else if (iochar < 123 && iochar > 96)
lowerCase(iochar);
else if (iochar < 58 && iochar > 47)
digit();
else putchar(iochar);
iochar = getchar();
}
}
void space(int iochar)
{
putchar(iochar);
putchar(iochar);
}
int newline(int iochar)
{
int count = 0;
while (iochar == 10){
if(count < 2)
putchar(iochar);
count++;
iochar = getchar();
}
return iochar;
}
void digit()
{
return;
}
void upperCase(int iochar)
{
iochar += 32;
putchar(iochar);
}
void lowerCase(int iochar)
{
iochar -=32;
putchar(iochar);
}
【问题讨论】:
-
你可以使用
'a'这样的字符——我们不记住ascii值——所以你的代码的可读性为零。 -
比较
stdin和stdout是什么意思? -
要将大写字符变为小写,考虑
iochar += 'a' - 'A';更容易理解。它适用于 ASCII 和 EBCDIC(适用于那些具有复古思想的编码人员)。标准方式是iochar = tolower(iochar); -
(6) 最简单的形式
if (stdin == stdout) return 1;应该可以。 (可以比较相同类型的指针,都是FILE*)没有技巧。 -
错误的标题:
stdin总是不同于stdout
标签: c stdout stdin getchar putchar