0

我有一个作业应该向用户询问一个数字并制作一个正方形,长度是他们输入的数字。如果用户输入 5,那么程序需要制作一个 5x5 的正方形。

当我编译它时,我得到一个分段错误(核心转储)。我不知道问题出在哪里。你们能帮帮我吗?我什至尝试用纸和铅笔运行程序,看看我的输出是什么,这对我来说似乎很好。

#include <stdio.h>

int main (){

int size, limit = 0;
char ch = 'A';
int rows = 1;

printf("Enter size:\n");
scanf("%d", size);

while (limit <= size){

    if (rows == 1 || rows == size){  /* This only works in first and last row */
       printf("%c", ch);
       limit++;
    }

    if (rows != 1 && rows != size){ /* This only works if row is not 1 and last row*/
       do{
            printf("%c", ch);
            limit++;

            do {
               printf(" ");
               limit++;
            } while (limit != size -1);

            limit++;

            if (limit == size){
               printf("%c", ch);
               rows++;
               limit = 0;
               printf("\n");
            }

       }while (rows != 1 && rows != size);  /* while not in first AND last row */

    }
4

4 回答 4

4
int size, limit = 0;

...

scanf("%d", size);

启用编译警告,这是错误的。

于 2013-10-18T19:55:29.250 回答
2

你正在传递一个int给scanf,像这样传递它的地址

scanf("%d", &size);
于 2013-10-18T19:55:44.413 回答
1
scanf("%d", size);

您将错误的参数传递给scanf. 您正在传递一个整数,但您需要传递的是一个指向已分配存储的指针,其中提取的字符的解释存储在内存中。

为此,请记住&(&),地址运算符,是您在 C 中用来获取内存地址的。换句话说,您必须传递给scanf您要用于存储数据的变量的地址。

于 2013-10-18T20:09:09.950 回答
0

scanf("%d", size);

& 在 scanf 语句中丢失

scanf("%d", &size);

于 2013-10-19T10:02:13.167 回答