我想从一行中读取类似“ 24a10b9100”的内容。问题是,如果我在最后使用这些功能之一(fgets
,getchar
等),则输入只是一个字符串。但是我想将数字读为数字,将字符读为字符。
最佳答案
您可以使用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;
}