小编Jue*_*haw的帖子

验证do-while循环C中的输入类型

基本上,我需要确保输入是一个整数,如下所示:

do {
    printf("Enter > ");
    scanf("%d", &integer);
} while (/* user entered a char instead of an int */);
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法,但是当我尝试输入时,它总是以运行时错误或无限循环结束char.我知道这fflush(stdin)是一个未定义的行为,最好不要将它包含在我的代码中以防止任何错误加上由于某些原因在VS2015中不再起作用.

下面的代码是我尝试过的方法:

typedef enum {false, true} bool;
int ipt;
char c;
bool wrong_ipt;

do {
    c = '\0';
    printf("Enter > ");
    scanf("%d%c", &ipt, &c); //infinite loop occurs while a char has been entered
} while (c != '\n');

do {
    c = '\0';
    printf("Enter > ");
} while (scanf("%d", &ipt) …
Run Code Online (Sandbox Code Playgroud)

c loops infinite-loop

4
推荐指数
2
解决办法
4125
查看次数

为什么参数中的默认char*必须是const?

class MyString {
private:
    char *m_pchString;
    int m_nLength;
public:
    MyString(char* pchString="0") {      //problem on this parameter
        m_nLength = strlen(pchString)+1;
        m_pchString = new char[m_nLength];
        strncpy(m_pchString, pchString, m_nLength);
        m_pchString[m_nLength-1] = 0;
    }
    ~MyString() {
        delete[] m_pchString;
        m_pchString = 0;
    }
    char* GetString() {return m_pchString;}
    int GetLength() {return m_nLength;}
};
Run Code Online (Sandbox Code Playgroud)

如果我遵守了这个,编译器会发给我一个警告:

警告:不推荐将字符串常量转换为'char*'

除非我修改从参数char *pchString = "0"const char *pchString = "0"

为什么参数中的默认char*必须是const?

c++ visual-c++ c++11

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

标签 统计

c ×1

c++ ×1

c++11 ×1

infinite-loop ×1

loops ×1

visual-c++ ×1