使用 read() 函数从标准输入读取数字并直接保存为整数

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

#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);
}

当我执行此代码时,它 returns 只是随机整数,如 724109877

为什么会这样?
也很高兴听到是否有人告诉我从标准输入读取数字并保存为整数的正确方法

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

int main(){
    char num[100];
    char *p;
    int read_bytes = read(0,num, 5*sizeof(long)); // increase size according to your input
    long n = strtol(num,&p,10);

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

从控制台以文本形式读取数据。您需要像上面那样将其转换为整数。

您可以通过读取一行并稍后将其转换为数字来做到这一点:

#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] = '[=10=]';
    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);
}