【发布时间】:2010-10-26 07:15:56
【问题描述】:
我想将用户输入作为整数处理,但似乎 C 无法从标准输入获取 int。有这样做的功能吗?我将如何从用户那里获取 int?
【问题讨论】:
标签: c console user-input
我想将用户输入作为整数处理,但似乎 C 无法从标准输入获取 int。有这样做的功能吗?我将如何从用户那里获取 int?
【问题讨论】:
标签: c console user-input
#include <stdio.h>
int n;
scanf ("%d",&n);
【讨论】:
#include <stdio.h>
main() {
int i = 0;
int k,j=10;
i=scanf("%d%d%d",&j,&k,&i);
printf("total values inputted %d\n",i);
printf("The input values %d %d\n",j,k);
}
来自here
【讨论】:
标准库函数 scanf 用于格式化输入: %d int (d 是小数的缩写)
#include <stdio.h>
int main(void)
{
int number;
printf("Enter a number from 1 to 1000: ");
scanf("%d",&number);
printf("Your number is %d\n",number);
return 0;
}
【讨论】:
scanf() 是答案,但您当然应该检查返回值,因为从外部输入解析数字时很多很多事情都可能出错...
int num, nitems;
nitems = scanf("%d", &num);
if (nitems == EOF) {
/* Handle EOF/Failure */
} else if (nitems == 0) {
/* Handle no match */
} else {
printf("Got %d\n", num);
}
【讨论】:
long int 甚至 'long long int',因为它可以容纳更大的数字。
除了(f)scanf(其他答案已充分讨论)之外,还有atoi 和strtol,适用于您已经将输入读入字符串但想要将其转换为@987654324 的情况@ 或long。
char *line;
scanf("%s", line);
int i = atoi(line); /* Array of chars TO Integer */
long l = strtol(line, NULL, 10); /* STRing (base 10) TO Long */
/* base can be between 2 and 36 inclusive */
推荐strtol,因为它可以让你确定一个数字是否被成功读取(而不是atoi,它没有办法报告任何错误,如果它给出垃圾只会返回0)。
char *strs[] = {"not a number", "10 and stuff", "42"};
int i;
for (i = 0; i < sizeof(strs) / sizeof(*strs); i++) {
char *end;
long l = strtol(strs[i], &end, 10);
if (end == line)
printf("wasn't a number\n");
else if (end[0] != '\0')
printf("trailing characters after number %l: %s\n", l, end);
else
printf("happy, exact parse of %l\n", l);
}
【讨论】: