小C电子表格程序的骨架问题

时间:2018-09-20 08:23:01

标签: c

下面是创建用C编写的小型电子表格的初始框架代码。如果需要的行数少于7行,则工作正常,但如果需要的行数为7行或以上,则行不通。 (它在第7行中创建了多余的列,然后挂起。对深入了解问题的任何帮助都非常感谢

#include <stdio.h>

int main() {
    int x = 0, y = 0;
    int height, width, *p;
    char page[x][y];
    char token[] = "**   ";        /** spaces for formatting **/

    printf(" \n Enter number of rows and columns. separated by a space\t" );
    scanf("%d %d", &height, &width);

    for (y = 0; y < height; y++) {
        printf("Row %d\t ", y);
        page[x][y] = '\0';     /** prog fails at Row 2 if this line absent **/

        for (x = 0; x < width; x++) {
            if (y == 0)
                printf("  Col %c   ", (65 + x));    /** spaces for formatting **/
            else {
                p = &page[x][y];
                *p = token;
                printf("%d%c = ", y, (65 + x));  /** prog fails at Row 3 is these printf statements combined **/
                printf("%s" , *p);
            }
        }
        printf("\n\n");
    }
    return 0;
}

3 个答案:

答案 0 :(得分:3)

int x = 0, y = 0  ;
char page[x][y] ;

page中可用元素的数量而言,您认为这有什么用?您目前对heightwidth变量有何影响?

您当前正在创建一个没有元素的page(违反约束)。您很幸运(该程序真的很不幸,因为它掩盖了问题),该程序什么都不做。

在分配height之前,先建立从widthx输入到ypage的连接。以这种方式创建page后,就无法调整其大小。

答案 1 :(得分:1)

您想要这个:

 int main()
    {
    int x = 0, y = 0  ;
    int height , width, *p ;
    char token[] = "**   " ;        /** spaces for formatting **/

    printf(" \n Enter number of rows and columns. separated by a space\t" );
    scanf("%d %d", &height , &width);

    char page[width][height] ; // allocate width x height chars

在您的解决方案中,您基本上是在这样做:

char page[0][0] ;

分配一个宽度为0且高度为0的二维数组,这并不是真正有用。

访问page[x][y]将对xy的任何值无限制地访问数组,这将导致未定义行为(谷歌搜索结果)。

答案 2 :(得分:0)

以下的电子表格框架代码可以完美地工作,这要归功于上述的明智贡献。如果愿意,所有人都可以随意使用它作为任何小电子表格问题的基础。如果您希望保持漂亮的格式,则“ width”受行长的限制。但其结构允许在每个单元格中输入数据或公式,并使用指针数组或结构执行计算(并重命名行和列)。

包括

    int main()
    {
    int x = 0 , y = 0   ;
    int height , width, *p ;
    char token[] = "**   " ;        /** spaces for formatting **/


    printf(" \n Enter number of rows and columns. separated by a space\t" );
    scanf("%d %d", &height , &width);

    char page[width][height] ;

        for(y = 0 ; y < height  ; y++ )
           {
            if(y==0) printf("         ");
            else printf("Row %d\t " , y);



                   for(x= 0 ; x < width ; x++ )
                      {
                       if (y == 0)
                       printf("   Col %c   ", (65 + x));   

                       else
                            {
                            p = &page[x][y];
                            *p = token;
                             printf("%2d%c = %s" , y , (65+x) , *p);
                            }
                       }printf("\n\n");

           }

        return 0;
    }