我只想从 stdin
获取最后 3 个东西。
使用
scanf("%3d")
我可以得到前 3 个,但我想要后 3 个,并忽略它之前的所有内容。
示例输入
bkjashfsjak32326321536999999999999999999999999999999999999999999
我该怎么做?
如果可能的话,我想忽略 stdin
上的内容,只在缓冲区中获取 3 个字符。
最佳答案
看起来您正在读取一个整数。如果是这样(因为您忽略了其他所有内容),您可以阅读整篇文章并取除以 1000 后的余数。
scanf ("%d", &read_int);
last_3 = read_int % 1000;
更新:
由于它不是整数(假设 some_large_buf
可以接受最大的字符串):
scanf ("%s", some_large_buf);
last_3 = atoi (some_large_buf + strlen(some_large_buf) - 3);
更新 2: 此版本不使用缓冲区,它保持最低有效 3 位数字的滚动值。
unsigned int sum = 0;
char c;
while (1) {
scanf ("%c", &c);
if (c == 0 || c == '\n') break;
if (c >= '0' && c <= '9') {
sum *= 10;
sum += c - '0';
sum %= 1000;
}
else {
sum = 0;
}
}
printf ("%d", sum);
关于c - 如何只读取最后 3 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963365/