每行扫描数字的可变数量(scanf)
Changable amount of scanned numbers per line (scanf)
我需要扫描由 space 分隔的可变数量的数字,例如
例如暗淡=3
void scanNumbers(int dim)
{
// scans dim amount of numbers like "5235435 656435 23423423"
}
是否有一个简短的方法,比如 scanf("<%d * dim>", n1, n2, ... to dim) 或者我必须编写一个函数来循环读取每个字符?
我试过了
int n;
scanf("%d", &n);
int *Data = (int*) malloc (sizeof(int) * (n+1));
for(int i=0; i<n; i++)
scanf("%d ", &Data[i]);
但它要等待一个号码完成扫描。
没有简短的方法可以在对scanf()
的单次调用中扫描可变数量的输入,但是写一个for
一次扫描一个数字的循环。
scanf("%d ", &Data[i]);
等1个号码,因为格式后面的" "
指示scanf()
继续扫描,直到号码后遇到非白space。
关键问题是 "%d"
在扫描 int
之前首先读取前导白色-space。它不区分' '
和'\n'
,这在使用scanf()
[行阅读时很重要
最好的方法是用 fgets()
将 行 读入缓冲区,然后
使用 strtol()
或 sscanf()
.
解析 int
int n;
scanf("%d%*1c", &n);
int Data[n];
char buffer[40*n];
fgets(buffer, sizeof buffer, stdin);
// parsing with sscanf() using %n to determine scanning length
int i;
char *p = buffer;
for(i=0; i<n; i++)
int offset;
if (sscanf(p, "%d %n", &Data[i], &offset) != 1) {
break;
}
p += offset;
}
// use Data[0] ... Data[i-1]
根据你的信息,我可以说你有两个选择。如果您不知道输入的数字,请使用 strtol()
,这样您将告诉您的用户使用什么作为分隔符 ;,
或 space。如果您确实知道程序将接收多少输入,请使用 fgets()
将行保存到缓冲区,然后使用 sscanf()
进行解析。
我需要扫描由 space 分隔的可变数量的数字,例如
例如暗淡=3
void scanNumbers(int dim)
{
// scans dim amount of numbers like "5235435 656435 23423423"
}
是否有一个简短的方法,比如 scanf("<%d * dim>", n1, n2, ... to dim) 或者我必须编写一个函数来循环读取每个字符?
我试过了
int n;
scanf("%d", &n);
int *Data = (int*) malloc (sizeof(int) * (n+1));
for(int i=0; i<n; i++)
scanf("%d ", &Data[i]);
但它要等待一个号码完成扫描。
没有简短的方法可以在对scanf()
的单次调用中扫描可变数量的输入,但是写一个for
一次扫描一个数字的循环。
scanf("%d ", &Data[i]);
等1个号码,因为格式后面的" "
指示scanf()
继续扫描,直到号码后遇到非白space。
关键问题是 "%d"
在扫描 int
之前首先读取前导白色-space。它不区分' '
和'\n'
,这在使用scanf()
[行阅读时很重要
最好的方法是用 fgets()
将 行 读入缓冲区,然后
使用 strtol()
或 sscanf()
.
int
int n;
scanf("%d%*1c", &n);
int Data[n];
char buffer[40*n];
fgets(buffer, sizeof buffer, stdin);
// parsing with sscanf() using %n to determine scanning length
int i;
char *p = buffer;
for(i=0; i<n; i++)
int offset;
if (sscanf(p, "%d %n", &Data[i], &offset) != 1) {
break;
}
p += offset;
}
// use Data[0] ... Data[i-1]
根据你的信息,我可以说你有两个选择。如果您不知道输入的数字,请使用 strtol()
,这样您将告诉您的用户使用什么作为分隔符 ;,
或 space。如果您确实知道程序将接收多少输入,请使用 fgets()
将行保存到缓冲区,然后使用 sscanf()
进行解析。