我正在研究什么应该是一个简单的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);
}
答案 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[]
,您可以使用argc
和argv
以外的其他名称,但类型仍然不匹配。
答案 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);
}