【问题标题】:I/O redirection in C using exe使用 exe 在 C 中进行 I/O 重定向
【发布时间】:2015-09-30 00:01:26
【问题描述】:

这是我的代码:

#include<stdio.h>

int main()
{
    int a = '\0';

    while ((a = getchar()) != EOF){
        if (a != ' ' || a != '\t' || a != '\n' || a != ';' || a != ',' || a != '.'){
            putchar(a);
        }
        else{
            continue;
        }
    }

    system("pause");
    return 0;
}

我需要从输入文件中读取一首诗,并输出没有空格或标点符号的诗。必须使用 I/O 变化来完成。我已经搜索了所有内容,但我似乎无法找到如何按照我需要的方式执行此操作。非常感谢任何帮助...

【问题讨论】:

  • 尝试查看此链接以获取信息:stackoverflow.com/questions/19138983/…
  • 什么意思,I/O 变化?如果您的意思是 I/O 重定向,那么只需在命令行上使用重定向运算符:mycommand &lt; input_file &gt; output_file。从input_file 获取标准输入并将标准输出发送到output_file。但是您可能需要摆脱 system("pause") 的调用。
  • 您的if 毫无意义。就像每一种动物不是狗也不是猫一样,每个字符不是空格也不是制表符。所以你的if 捕捉到了一切。如果您只想找到既不是狗也不是猫的动物,您需要寻找不是狗并且不是猫的动物。

标签: c++ c redirect io


【解决方案1】:

希望这能解决您的问题。对字符使用 ascii 值。还使用 fgetc/fputc/fscanf/fprintf 等进行文件 i/o 相关操作。 ASCII 图表链接在这里ASCII Chart VALUES

#include<stdio.h>


int main()
{
 FILE *pfile=NULL;
 char data[255];
 int i=0;

 pfile=fopen("poem.txt","r");

 while((data[i]=fgetc(pfile)) != EOF)
 {

   if(data[i]> 32 && data[i] < 123)
   {
     if(data[i] != 44 && data[i]!= 45 && data[i]!=46 && data[i]!=33)
     {
       //In the above 'if statement' you can add more characters/special
       //characters you wish to exclude/ignore
       printf("%c",data[i]);
       i++;
     }
   }

}
 return 0;
}

【讨论】:

  • 我强烈建议不要使用 ASCII 数字,而是使用字符。使用这些数字使确定程序的意图变得困难。当然,有一些选项,如 isalphaisspace,在适当的时候比任何一种方法都好。
  • 我希望你意识到 C 中的 'char' 真的是为了成为最小的 'integer' 而不是 'character' 数据类型。如果您将字符数据类型与数字进行比较,默认情况下它总是将字符的 ASCII 值与数字进行比较。您需要对其进行显式类型转换以获取字符而不是 ascii 值。那么,当您可以直接将它们与数值进行比较时,为什么会有额外的开销?!大声笑。
  • 实际上在 C 中,字符常量的类型为 int,就像您使用的十进制常量一样。此外,您的代码和用字符常量替换数字常量的相同代码编译成相同的 x86 程序集(在 gcc 上有和没有 -O2)。请参阅 stackoverflow.com/questions/11310456/…stackoverflow.com/questions/20764538/type-of-character-constant。唯一的额外转换发生在编译时而不是运行时。
猜你喜欢
  • 1970-01-01
  • 2013-11-19
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多