【问题标题】:C crypto program with stdin, stdout, stderr and error message带有标准输入、标准输出、标准错误和错误消息的 C 加密程序
【发布时间】:2014-03-22 11:12:07
【问题描述】:

我正在开发一个简单的 c 程序,它需要两个 args 一个字符 e 或 d 和一个键。如果 e 它将加密,如果 d 在这两种情况下都使用密钥解密。如果出现错误,它会从标准输入读取并输出到标准输出或标准错误。我收到警告消息

*cypher.c:30:4: 警告:传递“fputc”的参数 1 从指针生成整数而不进行强制转换 [默认启用] /usr/include/stdio.h:579:12:注意:预期为“int”,但参数的类型为“char”

程序编译和编码,但解码似乎不起作用,如果它传递一个字符而不是 d 或 e,它也不会抛出错误,因为它应该。任何帮助将不胜感激。

*已被编辑以解决一些问题,例如,last fputc() 现在是 fputs(),i++ 被重新添加到 last 循环中,并且 if(ende = e) 替换为 if(ende == “e”)。错误代码不再是问题,但程序功能似乎仍然存在。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main(char ende, char key[150]){

  int e; 
  int  i=0;      
  int c=fgetc(stdin);
  int n=strlen(key);

   if(ende == "e"){
       while(c != EOF){
          c= fgetc(stdin);
          e=(c - 32 + key[i % n]) % 95 + 32;
          fputc( e, stdout);
          i++;
       }
    }
   else if (ende == "d"){
       while(e != EOF){
         e= fgetc(stdin);
         c=(e - 32 - key[i % n] + 3 *95) %95 + 32;
         fputc( c, stdout);
         i++
       }
    }
 else{
   fputs("you broke it",stderr);
   exit (1);
     }
   exit (0);
}

【问题讨论】:

  • 你最后一个 fputc 不符合规则。 fputc 应该只输入一个字符。而是使用 fputs。
  • 了解如何将参数传递给您的程序
  • 好的,我发现我的第一个错误是我不小心从解码块中删除了 i++。
  • 你知道一篇关于在 c 中传递参数的有用文章吗?

标签: c stdout stdin stderr


【解决方案1】:

if (ende = e) 有问题,可能是if (ende == e)else if (ende == d)

【讨论】:

    【解决方案2】:
    fputc("you broke it",stderr);
    

    fputc()int 作为第一个参数,它应该是:

    fprintf(stderr, "you broke it");
    

    你的main() 也不是标准的:

    main(char ende, char key[150])
    

    标准的main应该是int main(int argc, char* argv[],你可以使用除argcargv之外的不同名称,但类型仍然不匹配。

    【讨论】:

      【解决方案3】:

      试试这个:

      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>
      
      int
      main(int argc, char *argv[]) {
      
          int e, c, n, i;
          char *key, *ende;
      
          i = 0;
          ende = argv[1];
          key = argv[2];
          n = strlen(key);
          c = fgetc(stdin);
      
          if (strcmp(ende, "e") == 0) {
              while(c != EOF){
                  e=(c - 32 + key[i % n]) % 95 + 32;
                  fputc( e, stdout);
                  i++;
                  c= fgetc(stdin);
              }
          }
          else if (strcmp(ende, "d") == 0) {
              while(c != EOF){
                  e=(c - 32 - key[i % n] + 3 *95) %95 + 32;
                  fputc( e, stdout);
                  i++;
                  c= fgetc(stdin);
              }
          }
          else{
              fputs("you broke it",stderr);
              exit (1);
          }
          exit (0);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多