这里是初学者的问题,我无法找到相关的示例。我正在使用一个C程序,它将使用fgets和sscanf从stdin接收整数输入,然后将其写入数组。但是,我不确定如何使fgets写入数组。
#define MAXINT 512
char input[MAXINT]
int main(void)
{
int i;
int j;
int count=0;
int retval;
while (1==1) {
fgets(input, MAXINT[count], stdin);
retval = sscanf(input, "%d", &i);
if (retval == 1) {
count = count++;
}
else
if (retval != 1) {
break;
}
}
我只是将fgets放入for循环中吗?还是比这更复杂?
一个可以将fgets()
和ssprintf()
置于一个long条件中:
#define MAXINT 512 /* suggest alternate name like Array_Size */
int input[MAXINT];
char buf[100];
int count = 0;
while ((NULL != fgets(buf, sizeof buf, stdin)) && (1 == sscanf(buf,"%d",&input[count]))) {
if (++count >= MAXINT) break;
}
...或更方便用户使用:
// While stdin not closed and input is more than an "Enter" ...
while ((NULL != fgets(buf, sizeof buf, stdin)) && (buf[0] != '\n')) {
if (1 != sscanf(buf,"%d",&input[count])) {
puts("Input was not an integer, try again.\n");
continue;
}
if (++count >= MAXINT) break;
}
[fgets()
读入字符串(char
的数组),而不是int
的数组。
您的循环应为:
char line[4096];
while (fgets(line, sizeof(line), stdin) != 0)
{
...code using sscanf() iteratively to read into the array of int...
}
不检查输入会导致问题。充其量,您的代码最有可能将输入的最后一行处理两次。仅在您的退款被两次处理的情况下,您才可以这样做。最坏的情况是,您的代码可能永远不会终止,直到您的程序无聊到死,内存不足或对它失去耐心并杀死它为止。
[This]不能回答在while循环中如何写入数组的问题。无论输入多少数字,我都将
sscanf
函数括在for
循环中吗?我会设置每次按下Enter时要运行的内容吗?
鉴于每行只有一个数字,那么循环主体中的代码很简单:
char line[4096];
int array[1024];
int i = 0;
while (fgets(line, sizeof(line), stdin) != 0)
{
if (i >= 1024)
break; // ...too many numbers for array...
if (sscanf(line, "%d", &array[i++]) != 1)
...report error and return/exit...
}
请注意,如果同一行上有垃圾(其他数字,非数字),则此代码不会注意到;它只是获取第一个数字(如果有),而忽略其余的数字。
如果每行需要多个数字,请查看How to use sscanf()
in loops了解更多信息。
如果要用空白行终止输入,则不能使用sscanf()
或fscanf()
;他们通读多个空白行以寻找输入。
使用scanf()
很简单,但是放入数组...
C在大小上很难动态初始化数组,这有时是大屠杀的完美主义者。
sscanf
和输出
int main()
{
int total_n;
int n;
int i;
char *s = "yourpattern1yourpattern2yourpattern23";
printf("your string => %s\n", s);
int array[129] = {0};//some big enough number to hold the match
int count = 0;
while (1 == sscanf(s + total_n, "%*[^0123456789]%d%n", &i, &n))
{
total_n += n;
printf("your match => %d\n", i);
array[count] = i;
count++;
}
printf("your array => \n");
for (i=0;i<count;i++)
printf("array[i] => %d\n", array[i]);
}