c - 如何只读取最后 3 位数字?

标签 c string scanf

我只想从 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/

相关文章:

python - python中的n-gram,四,五,六克?

c - 分配给二维数组的段错误

java - 不区分大小写的字符串过滤器

php - SQL求职功能问题

c - 如果我使用 GPA 指针,为什么在使用 scanf ("%lf", GPA) 时会出现段错误,如果不是指针,则在使用 scanf ("%lf", &GPA) 时会出现段错误?

c - 从文本文件读取输入

c - 如果数组太大,如何从数组中读取数据......!

c - Makefile 与 obj 文件不匹配

c - 将 XOR 作为宏实现,但未按预期工作

c - 在 C 中扫描和打印 char 变量