我想从一行读取类似“24a10b9100”的内容。问题是,如果我在末尾使用其中一个函数(fgets
,getchar
等),则输入只是一个字符串。但我希望将数字读作数字,将字符读作字符。
答案 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值查看它是数字还是字符。