#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读取数字并将其另存为整数的正确方法
你可以通过读取一行并将其转换为数字来完成此操作:
#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);
}