我正在尝试从用户中获取输入并将其存储到数组中并将其打印出来:我有2个功能:
/* Read a vector with n elements: allocate space, read elements,
return pointer */
double *read_vector(int n){
double *vec = malloc(n * sizeof(double));
int i;
for (i = 0; i < n; i++)
vec[i] = n;
return vec;
}
打印功能是:
void print_vector(int n, double *vec){
int i;
for (i = 0; i < n; i++) {
printf("%dn", vec[i]);
}
}
主要功能是:
#include <stdio.h>
#include <stdlib.h>
double *read_vector(int n);
void print_vector(int n, double *vec);
void free_vector(double *vec);
int main(){
int n;
double *vector;
/* Vector */
printf("Vectorn");
printf("Enter number of entries: ");
scanf("%d", &n);
printf("Enter %d reals: ", n);
vector = read_vector(n);
printf("Your Vectorn");
print_vector(n,vector);
free_vector(vector);
}
当我运行此功能时,它不允许我输入任何数字,它只是跳过并打印出0。我该如何解决?
尝试以下代码。几乎可以肯定,您要么不用警告来编译,要么忽略警告。所有警告都意味着一些事情,对初学者来说,所有警告都重要。使用GCC使用-wall选项,甚至-Pedantic。
正如Halfelf所指出的那样,您需要在读取循环中进行SCANF,但需要是指针(&amp; vec [i])。始终在主的尽头返回一些东西。还要检查malloc的返回值,它可能会失败并返回空指针。
#include <stdio.h>
#include <stdlib.h>
double *read_vector(int n)
{
double *vec = malloc(n * sizeof(double));
int i;
for (i = 0; i < n; i++) {
printf("Enter number %i of %i: ", i + 1, n);
scanf("%lf", &vec[i]);
}
return vec;
}
void print_vector(int n, double *vec)
{
int i;
for (i = 0; i < n; i++) {
printf("%fn", vec[i]);
}
}
void free_vector(double *vec)
{
free(vec);
}
int main()
{
int n;
double *vector;
printf("Vectorn");
printf("Enter number of entries: ");
scanf("%i", &n);
vector = read_vector(n);
printf("Your Vectorn");
print_vector(n, vector);
free_vector(vector);
return 0;
}
在 read_vector(int n)
函数的循环中:
for (i=0; i<n; i++)
vec[i] = n; // this should be scanf("%lf",vec+i) to read input from stdin
并注意您的{
和}
。如果循环中只有一行,则不需要{
和}
,或者您必须使用一对。return
子句必须不在循环中。
顺便说一句,在主函数末尾添加return 0
。
简单..您忘了写Scanf ..!
double *read_vector(int n)
{
double *vec = malloc(n * sizeof(double));
int i;
for (i = 0; i < n; i++)
scanf("%d",&vec[i]);
return vec;
}