将用户的输入存储到数组中

时间:2013-11-20 16:17:48

标签: c arrays

我在visual studio 2012 RC中编写了一个简单的代码,要求用户插入二维数组的值。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 5
#define COL 3


int main()
{
    char array[ROW][COL];
    int value;

    for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COL; j++)
        {
            scanf("%d", &value);
            array[i][j] = value;
            // scanf("%d", &array[i][j]); //use this statement instead of  above 2 statements.
        }
        printf("\n");
    }

问题是上面的代码工作正常;但是,如果我使用(如评论部分所述)

scanf("%d", &array[i][j])

直接,不是将输入存储到变量中然后将其分配给数组,程序将给出“堆栈内存'数组'已损坏'之类的错误。

有人可以告诉我为什么我遇到这个问题,如何在将输入直接存储到数组中时避免使用它,而不是先将输入存储在变量中。

ps-这是我的第一篇文章,所以要温柔:)

3 个答案:

答案 0 :(得分:1)

您试图将int%d)放入charchar array[ROW][COL]),因此存在内存违规行为。

答案 1 :(得分:0)

声明你应该声明的数组:

int array[ROW][COL];

这将解决您的问题。 %d格式说明符期望传递指向int的指针,并将指针传递给char。您的数组很小,以适合您尝试使用scanf放置的值。

答案 2 :(得分:0)

@light:

  顺便说一句,我调整了程序,结果发现如果我使用int数组,就没有问题了。不过,我想知道为什么char数组会出错?

如果您想使用char数组,可以使用以下内容。

目前我只能访问gcc,但是 在玩你的代码时,我发现了以下内容:

#define ROW 2   // note that I defined a 2x2 matrix
#define COL 2
....
char array[ROW][COL];
....
scanf("%c", &array[i][j]);
....

我使用以下行打印结果:

printf("\n");
for (int i = 0; i < ROW; i++)
{
    for (int j = 0; j < COL; j++)
    {
        printf("%c ", array[i][j]);
    }
    printf("\n");
 }

如果我想将以下四个值作为输入1 2 3 4,我会注意以下几点:

$./a.out
1
2    # input breaks here and the following lines are printed....

1 

2 

但是,如果我使用以下行

do {scanf("%c",&array[i][j]);} while ( getchar() != '\n' );

代码而不是

scanf("%d", &array[i][j]);

在您的两个for循环中,它似乎按预期工作。

示例输入和输出(数字实际上是字符):

$./a.out
1
2
3
4

1 2  #output 
3 4 

当然它适用于信件:

$./a.out
a
b
c
d

a b #output
c d