我正在开发一个简单的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[]
,您可以使用除argc
和argv
之外的不同名称,但类型仍然不匹配。
试试这个:
#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);
}