英文:
Array using functions on C
问题
以下是翻译好的部分:
一个接受数组并在控制台上显示它的程序,使用函数。
程序应包含3个函数,包括主函数(main())。
接下来的两个函数用于接受数组的值,以及在控制台上显示数组的值。
#include <stdio.h>
#include <stdlib.h>
void getarray(int a[], int size);
void displayarray(int a[], int size);
int main(void) {
int a[20], size;
getarray(a, size);
displayarray(a, size);
return EXIT_SUCCESS;
}
void getarray(int a[], int size) {
int i;
printf("输入数组的大小:");
scanf("%d", &size);
for (i = 0; i < size; i++) {
scanf("%d", &a[i]);
}
}
void displayarray(int a[], int size) {
int i;
for (i = 0; i < size; i++) {
printf("%d\t", a[i]);
}
}
这是我尝试的。我没有得到正确的输出。
我的输出:
输入数组的大小:3
1
2
3
然后停在这里。
这里有什么错误吗?或者有没有其他方法来得到结果?
英文:
A program to accept an array and diplay it on the console using functions.
Program should contain 3 functions including main() function.
Next two functions for accepting values to the array, and display array values on the console respectively.
#include <stdio.h>
#include <stdlib.h>
void getarray(int a[],int size);
void displayarray(int a[],int size);
int main(void) {
int a[20],size;
getarray(a,size);
displayarray(a,size);
return EXIT_SUCCESS;
}
void getarray(int a[],int size){
int i;
printf("enter the size of the array");
scanf("%d",&size);
for(i=0;i<size;i++){
scanf("%d",&a[i]);
}
}
void displayarray(int a[],int size){
int i;
for(i=0;i<size;i++){
printf("%d\t",a[i]);
}
}
This is what I tried. I did'nt get proper output.
My output:
Enter the size of the array3
1
2
3
And stopped here.
What are the mistake in it? Or is there another way to get result?
答案1
得分: 4
你需要将一个 int*
传递给 getarray
,否则 size
变量将局限于函数内部,你填写的值将无法在调用点使用:
void getarray(int a[], int *size) { // 注意:int*
int i;
printf("输入数组的大小");
if (scanf("%d", size) != 1) // 它已经是一个指针,所以不需要&
*size = 0;
for (i = 0; i < *size; i++) { // 解引用以获取值
scanf("%d", &a[i]);
}
}
然后这样调用它:
getarray(a, &size);
英文:
You need to send in an int*
to getarray
otherwise the size
variable will be local to the function and the value you fill in will not be available at the callsite:
void getarray(int a[], int *size) { // note: int*
int i;
printf("enter the size of the array");
if (scanf("%d", size) != 1) // it's already a pointer so no &
*size = 0;
for (i = 0; i < *size; i++) { // dereference to get the value
scanf("%d", &a[i]);
}
}
Then call it like so:
getarray(a, &size);
答案2
得分: 2
如评论中所述,问题在于main
中的size
和getarray
中的size
是不同的变量,即在函数内部更改size
不会在main
中更改它。
@TedLyngmo的答案展示了使用指针解决问题的方法。
另一种解决方法是让getarray
返回 大小。也许可以使用无符号类型表示大小。
unsigned getarray(int a[]) {
unsigned i, size;
printf("请输入数组的大小");
if (scanf("%u", &size) != 1) return 0;
for (i = 0; i < size; i++) {
scanf("%d", &a[i]);
}
return size;
}
然后像这样调用它:
size = getarray(a);
顺便说一句:对于一个真正的程序,你还应该添加处理用户输入的大小超出数组范围的情况的代码。
英文:
As stated in comments, the problem is that size
in main
and size
in getarray
are different variables, i.e. changing size inside the function doesn't change it in main
.
The answer from @TedLyngmo shows a way to solve the problem using pointers.
Another solution is to let getarray
return the size. And perhaps use an unsigned type for size.
unsigned getarray(int a[]) {
unsigned i, size;
printf("enter the size of the array");
if (scanf("%u", &size) != 1) return 0;
for (i = 0; i < size; i++) {
scanf("%d", &a[i]);
}
return size;
}
and call it like
size = getarray(a);
BTW: For a real program you should also add code to handle cases where a user inputs a size that are too big for the array.
答案3
得分: 1
已经定义了一个包含20个元素的数组
int a[20], size;
所以这个提示
printf("输入数组的大小");
是没有意义的。而且您正在将未初始化的变量size
传递给函数。结果调用第二个函数会导致未定义的行为。
在您的任务描述中写道
接下来的两个函数用于接受数组的值,并在控制台上显示数组的值。
这意味着数组应该已经被定义。所以这个提示
printf("输入数组的大小");
至少应该在main
函数中。
程序可以如下所示:
#include <stdio.h>
#include <stdlib.h>
void getarray(int a[], size_t size);
void displayarray(const int a[], size_t size);
int main(void)
{
size_t size;
printf("输入数组的大小:");
if (scanf("%zu", &size) != 1)
return EXIT_FAILURE;
int a[size];
getarray(a, size);
displayarray(a, size);
return EXIT_SUCCESS;
}
void getarray(int a[], size_t size)
{
puts("输入数组的元素:");
for (size_t i = 0; i < size; i++)
{
scanf("%d", &a[i]);
}
}
void displayarray(const int a[], size_t size)
{
for (size_t i = 0; i < size; i++)
{
printf("%d\t", a[i]);
}
putchar('\n');
}
或者您可以使用malloc
动态分配数组,例如:
int main(void)
{
size_t size;
printf("输入数组的大小:");
if (scanf("%zu", &size) != 1)
return EXIT_FAILURE;
int *a = malloc(size * sizeof(int));
if (a == NULL)
return EXIT_FAILURE;
getarray(a, size);
displayarray(a, size);
free(a);
return EXIT_SUCCESS;
}
其他两个函数保持不变。
英文:
You already defined an array with 20 elements
int a[20],size;
So this prompt
printf("enter the size of the array");
does not make sense. Also you are passing the uninitialized variable size
to the functions. As a result calling the second function invokes undefined behavior.
In your description of the assignment there is written
> Next two functions for accepting values to the array, and display
> array values on the console respectively.
It means that the array should be already defined. So this prompt
printf("enter the size of the array");
should be at least in main
.
The program can look the following way
#include <stdio.h>
#include <stdlib.h>
void getarray( int a[], size_t size );
void displayarray( const int a[], size_t size );
int main(void)
{
size_t size;
printf( "enter the size of the array: " );
if ( scanf( "%zu", &size ) != 1 ) return EXIT_FAILURE;
int a[size];
getarray( a, size );
displayarray( a, size );
return EXIT_SUCCESS;
}
void getarray( int a[], size_t size )
{
puts( "enter elements of the array:" );
for ( size_t i = 0; i < size; i++ )
{
scanf( "%d", &a[i] );
}
}
void displayarray( const int a[], size_t size )
{
for ( size_t i = 0; i < size; i++ )
{
printf( "%d\t", a[i] );
}
putchar( '\n' );
}
A;ternatively you can dynamically allocate an array using malloc
as for example
int main(void)
{
size_t size;
printf( "enter the size of the array: " );
if ( scanf( "%zu", &size ) != 1 ) return EXIT_FAILURE;
int *a = malloc( size * sizeof( int ) );
if ( a == NULL ) return EXIT_FAILURE;
getarray( a, size );
displayarray( a, size );
free( a );
return EXIT_SUCCESS;
}
The other two funcions stay unchanged.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论