Warm tip: This article is reproduced from serverfault.com, please click

c-使用read()函数从stdin读取数字并直接保存为整数

(c - Read number from stdin and save as integer directly, using read() function)

发布于 2020-12-06 11:24:51
#include <stdio.h>
#include <unistd.h>

int main(){
    int num;
    int read_bytes = read(0,&num,sizeof(int));

    printf("read %d bytes :[%d]\n",read_bytes,num);
}

当我执行此代码时,它只返回随机整数,例如724109877

为什么会这样呢?
也很高兴听到有人告诉我从stdin读取数字并将其另存为整数的正确方法

Questioner
co_lin
Viewed
11
185.165.168.41 2020-12-06 20:27:20

你可以通过读取一行并将其转换为数字来完成此操作:

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

int main()
{
    size_t  nb_bytes, buffer_size = 32;
    char    *buffer = malloc(sizeof(char) * (buffer_size + 1));
    int     number;

    buffer[buffer_size] = '\0';
    nb_bytes = getline(&buffer, &buffer_size, stdin);
    number = atoi(buffer);

    printf("read %zu bytes :[%d]\n", nb_bytes, number);

    free(buffer);
    return (0);
}

请注意,nb_bytes它将包含换行符,你可以减去1以获取数字的长度。

第二解决方案

你也可以简单地使用scanf,然后如果需要获取数字的长度,则可以轻松地进行计算。这是一个例子:

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

size_t get_number_length(int n)
{
    size_t length = n < 0 ? 1 : 0;

    if (n == 0)
        return (1);
    while (n != 0)
    {
        n /= 10;
        length++;
    }
    return (length);
}

int main()
{
    int number;

    scanf("%d", &number);
    size_t number_length = get_number_length(number);

    printf("read %zu bytes :[%d]\n", number_length, number);

    return (0);
}