C语言中关于scanf函数的使用问题

比如我定义了int *p;p=malloc(10*sizeof(int));我用scanf函数对p赋值时如何才能控制我赋值的个数,比如我想给p这段空间只赋值三个数或者五个,我怎么控制,不要说多写几个scanf。。。。谢谢,很着急!!!

你的“控制他的个数”是哪个他? 你是说自动增加 动态分配的单元个数 吗?

预先不知道个数,一边输入一边增加 动态分配的单元个数, 可以用 realloc 函数。

例如,你不断输入数据,不断 增加 动态分配的单元个数,直到 输入数 为 0 时 操作结束,
程序如下:
#include <stdio.h> /* printf, scanf, puts */
#include <stdlib.h> /* realloc, free, exit, NULL */
int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++) printf ("%d ",numbers[n]);
free (numbers);
return 0;
}
你要的功能可以实现,但 程序较复杂。
你不如 开个 足够大的 数组,程序可以简单很多。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-28
虽然不知道你想干什么,希望这例子可以帮助到你
#include<stdio.h>
#include<stdlib.h>
int main() 
{
int *a,n,i;
scanf("%d",&n);
a=calloc(n,sizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
printf("%d ",a[i]);
}
free(a);
return 0;
}

追问

你肯定知道我什么一意思了,如果没有n和calloc这个怎么办?还是这个问题,你这样行但是我想肯定还有另外的方法来做,但是我不知道怎么做

追答#include<stdio.h>
int main() 
{
    int a[99],n,i; //可以把a[99]定义大一点
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        printf("%d ",a[i]);
    }
    return 0;
}

第2个回答  2014-02-28
采用指针运算就行了,给第几个赋值就在指针p的基础上加上几,比如要个第五个赋值,scanf输入时使用p+4就可以了。追问

我问的不是单个的赋值,是总体赋值时候比如说我想赋值三个数给p,但是我开始并不知道我到底要给p多少值,怎么控制他的个数?

第3个回答  2014-02-28
不能一次赋几个,只能一次赋1个值,一次赋多个值是不可能的,可以通过循环一次赋1个,从而达到赋几个的目的
相似回答