在C

时间:2015-06-07 04:34:16

标签: c

我想从一行读取类似“24a10b9100”的内容。问题是,如果我在末尾使用其中一个函数(fgetsgetchar等),则输入只是一个字符串。但我希望将数字读作数字,将字符读作字符。

2 个答案:

答案 0 :(得分:2)

您可以使用sscanf%n说明符前进字符串。 %n说明符将告诉您扫描处理了多少个字符。可以将其添加到offset以在字符串中移动。它还可以用于检测何时应将整数拆分为两个整数 扫描集%79[^0-9\n]最多可扫描79个不是数字或换行符的字符。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char input[80] = {"24a10b9100"};
    char nondigit[80] = {0};
    int digit = 0;
    int thousands = 0;
    int offset = 0;
    int used = 0;
    int length = 0;
    length = strlen ( input);
    while ( offset < length) {
        if ( ( sscanf(input + offset, "%79[^0-9\n]%n", nondigit, &used)) == 1) {//scan for non digit string
            offset += used;//add characters used by scan to offset
            printf ( "not number %s\n", nondigit);
        }
        if ( ( sscanf(input + offset, "%d%n", &digit, &used)) == 1) {
            offset += used;
            if ( used > 3) {//scanned more than three digits, split the integer
                thousands = digit / 1000;
                digit %= 1000;
                printf ( "thousands %d\n", thousands);
                printf ( "number %d\n", digit);
            }
            else {
                printf ( "number %d\n", digit);
            }
        }
    }
    return 0;
}

答案 1 :(得分:1)

如果你在一个字符串中读取它,那么你可以逐字符遍历字符串并检查每个字符是数字还是数字,然后相应地处理。

您还可以使用isdigit()功能在ctype.h中检查字符是数字还是数字。

或者您可以逐个阅读该字符,并按ascii值查看它是数字还是字符。