C加密程序与stdin,stdout,stderr和错误消息

时间:2014-02-21 05:23:55

标签: c stdout stdin stderr

我正在研究什么应该是一个简单的c程序,它带有两个args,一个char或者d或者一个密钥。如果它将加密,并且如果在两种情况下都使用密钥解密。如果有错误,它从stdin读入并输出到stdout或stderr。我收到了警告信息

* cypher.c:30:4:警告:传递'fputc'的参数1使得指针中的整数没有强制转换[默认启用] /usr/include/stdio.h:579:12:注意:期望'int'但参数类型为'char

程序编译和编码,但解码似乎不起作用,如果它传递给其他d或e它应该的char,它也不会抛出错误。任何帮助将不胜感激。

*已被编辑以解决一些问题,例如,最后fputc()现在是fputs(),i ++被添加回到最后一个循环,而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);
}

3 个答案:

答案 0 :(得分:2)

if (ende = e)出了点问题,可能是if (ende == e)else if (ende == d)

答案 1 :(得分:1)

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以外的其他名称,但类型仍然不匹配。

答案 2 :(得分:0)

试试这个:

#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);
}