程序编译成功,但跑不了,什么问题?

谁能跑一下这个程序,看看什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void decrypt(const char *file);
int main(int argc,char *argv[])
{
    if(argc==2)
    {
    const char *encryptedfile=argv[1];
    decrypt(encryptedfile);
    return 0;
    printf("%d",argc);
    }
    else
    {
    printf("%s\n",argv[0]);
        printf("%d",argc);
        return 4;
    }
   
}
void decrypt(const char *file)
{
    int argc;
    FILE *encrypt=fopen(file,"rb");
    if(encrypt==NULL)
    {
        printf("fail to open\n"); 
        printf("%d",argc);
        return;
    }

    char decryptedFilename[100];
    strcpy(decryptedFilename, file);
    strcat(decryptedFilename, ".dec");

    
    FILE* decrypted = fopen(decryptedFilename, "wb");
    if (decrypted == NULL)
     {
        printf("Failed to create the decrypted file.\n");
        fclose(encrypt);
        return;
     }
     int ch;
     while((ch=fgetc(encrypt))!=EOF)
     {
         unsigned char decryptedByte= (ch<<3) | (ch>>5);
         decryptedByte^=0xF0;
         fputc(decryptedByte,decrypted);
     }
     fclose(encrypt);
     fclose(decrypted);
}

代码想实现什么功能?

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7541768
  • 这篇博客也不错, 你可以看下写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,结束程序并打印结果
  • 除此之外, 这篇博客: 预处理命令总合集。最实用的从代码中解析,超容易理解,这样你还看不懂?中的 首先看下列表格预处理归纳: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 指令描述
    #include它是C语言中的头文件命令,用于指定头文件嵌入源文件中。
    #define宏定义。
    #undef宏定义的终止符,用于取消已定义的宏。
    #ifdef如果宏已定义则返回真。
    #ifndf如果宏没有定义则返回真。
    #if如果条件语句成立,则编译运行下面的代码。
    #else与#if一起使用,如果#if条件不成立,则执行下面的代码。
    #elif与#if一起使用,如果#if条件不成立,当前条件成立,则执行下面的代码。
    #endif结束一个 #if……#else 条件编译块。
    #error当遇到标准错误时,输出错误消息。
    #pragma

    使用标准化方法,向编译器发布特殊的命令到编译器中。 

  • 您还可以看一下 王剑老师的站长必修课:网站是怎样做出来的?课程中的 运营:才刚开始,站长更重要的工作…小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    如果编译成功但无法正常运行,可以提供以下信息:

    1.程序报错信息或异常情况:首先查看程序运行时的报错信息,如有异常情况也需要记录,例如程序卡死、崩溃等。

    2.操作系统和编译器信息:记录程序运行的操作系统版本和编译器版本,不同版本可能会导致程序无法正常运行。

    3.代码片段:可以提供相关的代码片段,让其他人更好地理解代码的逻辑和实现方式。

    4.输入输出数据:提供输入数据和程序的输出结果,方便其他人进行测试和排查问题。

    对于段落0和段落1中的程序,如果无法正常运行可以通过以上信息进行排查。而对于段落2中的问题,可以给出以下解决方案:

    char *match( char *s, char ch1, char ch2 )
    {
        char *ch1_ptr = NULL;
        while (*s)
        {
            if (*s == ch1)
            {
                ch1_ptr = s;
            }
            if (ch1_ptr && (*s == ch2))
            {
                break;
            }
            if (ch1_ptr)
            {
                printf("%c", *s);
            }
            s++;
        }
        printf("\n");
        return ch1_ptr;
    }
    

    上述代码实现了函数match,首先定义一个指针ch1_ptr用于保存字符ch1的地址,然后遍历字符串s中的所有字符。当遇到字符ch1时,将其地址保存到ch1_ptr中。如果ch1_ptr不为空,且遇到了字符ch2,则退出循环。如果ch1_ptr不为空,则打印当前字符。最后输出一个空行,并返回ch1_ptr

    需要注意的是,该函数不会检查输入参数的有效性,如输入空指针、非法字符等,建议在调用时加入相关的检查。