小编Raj*_*esh的帖子

做while循环退出前成熟

我已经编写了用于读取开关状态的代码,如果按下#是3次则退出.

void allkeypadTest(void)
{
    static uint8_t modeKeyCount=0;

    do
    {
        uint8_t key=getKeyStatus();
        if(key)
        {
            if(key=='#')
            {
                modeKeyCount++;
                //pulseIODevice(LED1,1,500,200);
            }
            else
            {
                pulseIODevice(LED1,key-0x30,500,200);
            }
        }
     }while(modeKeyCount<3);
}
Run Code Online (Sandbox Code Playgroud)

但是一旦我输入#key一次,循环就会退出.如果按其他键,行为就可以了.但是,如果我pulseIODeviceif(key=='#')部分下取消注释,行为是正常的.pulseIODevice将在特定时间段内将LED切换一定时间并将PWM传递给它.我很困惑我的代码出了什么问题.请注意,如果未检测到任何键,getKeyStatus则返回'\0'(null)并返回1x4键盘键的ASCII值(ASCII值为3,6,9和#)

c avr do-while

2
推荐指数
1
解决办法
76
查看次数

初始化动态分配的整数

我猜动态创建的变量必须单独初始化,而不是在分配时初始化。为什么下面这行代码不能编译?为什么我会在 'p' 之前收到错误消息“预期的 ')'”。

*(int *p = malloc(sizeof(int))) = 23;

|

c malloc expression initialization declaration

2
推荐指数
1
解决办法
44
查看次数

在同一个函数中使用不同的命

myCout()当我在同一个函数中使用两个不同的命名空间时,为什么我得到错误消息(错误:重载的调用是不明确的)使用using namespace没有完全限定名称空间的指令?

#include <iostream>
using namespace std;

namespace first
{
     void myCout(void)
    {
        cout<<"Hello World is great\n";
    }
}

namespace second
{
     void myCout(void)
    {
        cout<<"Hello Sky is high\n";
    }
}

    int main(void)
    {

        cout<<"Hello World\n";
        using namespace first;
            myCout();

        using namespace second;
            myCout();

        return(0);
    }
Run Code Online (Sandbox Code Playgroud)

如果我myCout()在下面给出的第二个命名空间中使用完全限定的命名空间,则没有问题

int main(void)
{
    cout<<"Hello World\n";
    using namespace first;
    myCout();
    second::myCout();
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

c++ oop namespaces function

1
推荐指数
1
解决办法
470
查看次数

添加偏移量时,数组名称上的sizeof运算符

我很好奇sizeof(arrayName + offset).它给了我sizeof(pointer).虽然数组名实际上是C中的常量指针,但是sizeof(arrayName)给出了数组的字节大小.所以我猜编译器(arrayName+offset)即使对于纯指针也是如此sizeof(),因此在使用数组名时只会出现异常sizeof(arrayName).

这种行为是否sizeof(arrayName + offset)由编译器很好地定义?我正在使用MinGW 32位编译器.除了使用简单的数学之外,还有什么方法我们可以知道部分数组的大小(sizeof(arrayName) - offset*sizeof(arrayName[0]))吗?

sizeof(arrayName)不是在C/C++不一致的语言结构?出于所有其他目的,arrayName被视为地址.当我们将数组传递给函数时,这种行为可能会导致错误,初学者总是会遇到这个问题.

c arrays sizeof mingw32

1
推荐指数
1
解决办法
64
查看次数

如果文件已经打开,fopen 是否返回 NULL 指针?

我假设如果文件已经打开则fopen返回NULL指针。但如果文件已经打开,它看起来fopen不会返回NULL"w"模式下。下面是我用来尝试这个的代码,我没有收到任何错误。我尝试过 mingw32 以及 TDM-GCC-64 编译器。如果我没记错的话,如果文件已经打开,C++ 会报错。

#include<stdio.h>

int main()
{
    FILE *fp1, *fp2;
    
    fp1 = fopen("file1.txt", "w");
    fp2 = fopen("file1.txt", "w");
    
    if(fp2 == NULL)
    {
        printf("Error in opening file\n");
        return(0);
    }
    
    // Edit: added following code to check the behavior if write operation
    // is performed simultaneously
    
    fputc('A', fp1);
    fputc('M', fp1);
    fputc('S', fp1);
    fputc('B', fp2);
    
    fclose(fp1);
    fclose(fp2);
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:增加了额外的代码来写一些数据都fp1fp2和看到的行为。如果执行,file1.txt包含数据BMS和似乎是正确的行为,fp1并 …

c file-handling mingw32

1
推荐指数
1
解决办法
2576
查看次数

数据类型为char,其值范围为0-255

我在查看链接数据类型的数据类型

它被写为char类型是1字节,范围是-128到127或0到255.

这怎么可能?默认char表示签名权限. 在此输入图像描述

编辑:还有一个问题这个C代码什么问题?.但这不是同一个问题.标题说这个代码有什么问题,搜索不会轻易列出这个答案.人们必须完全分析这个问题才能理解这个问题.

编辑:看了几个答案和评论后,我又有了疑问.双引号内的字符串被视为char.如果我将双引号字符串传递给具有signed char类型参数的函数,我会收到警告.itoa和许多其他库函数也使用char类型参数而不是signed char.当然,类型转换会避免这个问题.那么操作空终止字符串的函数的最佳参数类型是什么(例如LCD显示相关函数)?使用signed char或unsigned char(因为char是实现定义的,我猜它可能不是可移植的)

c mingw

-1
推荐指数
2
解决办法
929
查看次数