【问题标题】:How to use ascii code of argv while making a conditional statement?进行条件语句时如何使用 argv 的 ascii 代码?
【发布时间】:2019-12-26 17:38:39
【问题描述】:

我是初学者。所以我试图做出条件语句以确保argv 是一个正整数。为此,我需要 argv[1] 的 ascii 代码。我打算做一个 if 条件语句,只有当 argv[1]/ascii 代码 0-9 为 1 时才会执行。

【问题讨论】:

  • 我认为您需要区分作为参数传递的单字母字符串的 ASCII 码和传递的数字文本字符串的整数值。在第一种情况下,您可能会收到字符串 "1",其 ASCII 值为 49,但数字等价物是 1

标签: c if-statement conditional-statements ascii argv


【解决方案1】:

不要考虑低级 ASCII 码(如果机器不使用 ASCII 怎么办?)。只需在表达式中使用字符常量:

if (*argv[1] >= '0' && *argv[1] <= '9')
    do stuff

更好的是,使用 ctype.h 中的isdigit

if (isdigit(*argv[1]))
    do stuff

argv[1] 之前的星号是取消引用运算符。在这种情况下,它获取argv[1] 的第一个字符。

【讨论】:

  • 不幸的是,在范围表达式中使用字符常量不适用于 EBDIC(因为 当然 IBM 选择很困难)。我认为 C 对字符集的唯一要求是 '0' &lt; '9',除了你需要坚持使用 isdigit 等函数之外。ascii-table.com/ebcdic-table.php
  • @Dai 数字字符 '0''9' 在 C 标准中保证是连续的,但只有它们。
【解决方案2】:

所以我正在尝试使用条件语句来确保 argv 是一个正整数。

好的...

为此,我需要 argv[1] 的 ascii 代码。

不,你没有。你应该改用strtol

if( argc >= 2 ) {

    char* text = argv[1];

    long value = strtol( text, /*end:*/ NULL, /*base:*/ 10 );
    if( errno != 0 ) { // See https://stackoverflow.com/questions/26080829/detecting-strtol-failure/26083517 
        // `text` is not a valid integer or other parse error
    }
    else {
        if( value > 0 ) {
            // do stuff
        }
        else {
            // value is an integer that's zero or negative
        }
    }
}

我打算做一个 if 条件语句,仅当 0-9 的 argv[1]/ascii 代码为 1 时才会执行。

如果文本值大于 9,则不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2011-04-18
    相关资源
    最近更新 更多