带有stdin、stdout、stderr和错误消息的C加密程序



我正在开发一个简单的c程序,它使用两个参数,一个是字符e或d,另一个是键。如果e,则在这两种情况下都将使用密钥进行加密,如果d则使用密钥进行解密。它从stdin读取,如果出现错误,则输出到stdout或stderr。我收到警告信息

*cypher.c:30:4:警告:传递"fputc"的参数1会使指针中的integer不带强制转换[默认情况下启用]/usr/include/stdio.h:579:12:注意:应为"int",但参数的类型为"char ">

该程序编译和编码,但解码似乎不起作用——如果它被传递了一个除d或e之外的字符,它也不会抛出错误。如有任何帮助,我们将不胜感激。

*已经进行了编辑,以解决一些问题,例如,最后一个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);
}

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

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

试试这个:

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

相关内容

  • 没有找到相关文章

最新更新