我想用fgets得到第二个和第三个整数
用户输入:1 2 3
int firstint, secondint;
char buffer[12];
fgets(firstInteger, 12, stdin);
firstint = atoi(buffer);
printf("%d is the first integer", firstint);
它的输出是1。
可以用fgets得到2和3吗?
我知道scanf会导致问题,我想使用fgets。
最佳答案
下面的代码从用str
分隔的字符串,
中提取数字。
它适用于所有非数字分隔符。
功能strtol可能失败,应进行检查。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *str = "1, 2, 3";
char *p = str;
char *q;
// While we aren't at the end of string.
while (*p) {
// Convert string number to long
long val = strtol(p, &q, 10);
if (q > p) {
// We've got number, clamped to LONG_MIN..LONG_MAX
// You can store them into array here, if you want.
printf("%ld\n", val);
p = q;
} else {
// Skip character
p++;
}
}
return 0;
}
输出:
1
2
3
你的用例:
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 12
#define NUMBER_COUNT 3
int main(void) {
long numbers[NUMBER_COUNT];
int index = 0;
char buffer[BUFFER_SIZE];
if (fgets(buffer, BUFFER_SIZE, stdin)) {
char *p = buffer;
char *q;
while (*p) {
// Convert string number to long
long val = strtol(p, &q, 10);
if (q > p) {
if (index < NUMBER_COUNT) {
numbers[index++] = val;
} else {
break;
}
p = q;
} else {
// Skip character
p++;
}
}
for (int i = 0; i < index; i++) {
printf("%ld\n", numbers[i]);
}
}
return 0;
}
另一种可能性是提到
scanf
if (scanf("%d %d %d", &var1, &var2, &var3) != 3) {
// Failed to read 3 int's
}