根据用户的字符输入创建一个矩形

时间:2016-02-07 15:20:15

标签: c

我必须在C中编写一个程序(我是新的),以便用户输入行数和列数以及要显示为矩形的字符,例如:6行和6列星号矩形。

这是详细的作业。

  

您的程序要做的第一件事就是打印一个选项菜单   用户。您可以选择自己的措辞或顺序   显示的选项,但菜单中给出的每个选项必须匹配   跟随:提示用户输入单个的功能   字符。函数的返回值是char并将返回   用户输入的字符值。此返回值为   存储在main()中的局部变量C中。初始默认值为   这个角色将是' ' (空白或空格字符)。

     

提示用户输入介于1之间的数值的功能   和15(含)。如果用户输入的值超出此范围,则   提示用户重新输入值,直到输入正确的值。   函数的返回值为int,将返回该值   由用户输入。此返回值将存储在本地   main()中的变量N.此字符的初始默认值   将是0。

     

两个"打印矩形"功能。每个功能都将获取当前功能   整数值N和字符值C作为输入参数。回报   这些函数的值将无效。功能将打印   使用输入字符C的N行和列的矩形   仅限边框功能将使用仅打印矩形   边界。 “填充”功能将矩形打印为实体   长方形。例如,如果整数值N = 6,则为字符   值C =' *'并调用Filled In类型,如下所示   将打印矩形:

到目前为止,这是我的代码,我想知道我做错了什么,我是否正确编写了程序。

       #include <stdio.h>
       #include <stdlib.h>

       char enterSingleChar();
       int enterNumValue();
       void printRectanlgeOne(int N, char C);
       void printRectangleTwo(int N, char C);

     int main()
    `enter code here`{       
        char userChoice;
        int N = 0;
        char C = ' ';

        fprintf(stdout, "Please choose one of the following choices below \n");     
        fprintf(stdout, "Enter/Change Character (C/c)\n");
        fprintf(stdout, "Enter/Change Number (N/n) \n");
        fprintf(stdout, "Print Rectangle Type 1 (Border Only), enter 1 \n");
        fprintf(stdout, "Print Rectangle Type 2 (Filled in), etner 2 \n");
        fprintf(stdout, "Quit Program (Q/q) \n");

        scanf("%c", &userChoice);

        switch(userChoice)
        {       
                case 'C':
                case 'c':
                        enterSingleChar();
                        break;
                case 'N':
                case 'n':
                        enterNumValue();
                        break;
                case '1':
                        printRectangleOne(N,C);
                        break;
                case '2':
                        printRectangleTwo(N,C);
                        break;
        break;
                case 'Q':
                case 'q':
                        fprintf(stdout, "The program will now quit\n");
                        exit(1);
                default:
                        break;
        }               
}       

char enterSingleChar()
{
        char singleChar = ' ';
        fprintf(stdout, "Please enter a single character \n");
        scanf("%c", &singleCharC);
        return singleChar;
}

int enterNumValue()
{
        int numValue;
        fprintf(stdout, "Please enter a numerical value between 1 and 15 inclusively \n");

scanf("%d", &numValue);

        while(numValue <= 1 || numValue >= 15)
        {
                fprintf(stdout, "You have entered an invalid num \n");
                fprintf(stdout, "Please try again \n");
                fprintf(stdout, "Please enter a numerical value between 1 and 15 inclusively \n");
                scanf("%d", &numValue);
        }
        return numValue;
}

void printRectangleOne(int N, char C)
{
        int i;
        int j;
        for(i = 0; i <= N; i++)
        {
                fprintf(stdout, &C);

                for(j = 0; i <= N; i++)
                {
fprintf(stdout, &C);
                }
        }
        printf();
}

void printRectangleTwo(int N, char C)
{

}

2 个答案:

答案 0 :(得分:1)

使用编译器

如果您尝试在启用了所有警告的情况下编译该代码,它会开始喷出您应该更正的错误,然后再继续:

test.c:10:5: error: stray ‘`’ in program
     `enter code here`{
     ^
test.c: In function ‘main’:
test.c:10:6: error: unknown type name ‘enter’
     `enter code here`{
      ^

test.c: In function ‘main’:
test.c:34:25: warning: implicit declaration of function ‘printRectangleOne’ [-Wimplicit-function-declaration]
                         printRectangleOne(N,C);
                         ^
test.c: In function ‘enterSingleChar’:
test.c:53:22: error: ‘singleCharC’ undeclared (first use in this function)
         scanf("%c", &singleCharC);

检查您的输入

我可以看到的一个问题是,当使用scanf从标准输入读取时,也会将Enter键放入队列

所以你被问到了,

Enter one character:
Enter another character:

然后输入:

A 输入 B 输入

并且你希望这两个字符是A和B.输入队列中的真实内容可能是,取决于平台(我不确定):

A\r\nB\r\n  (*six* characters!)
A\nB\n      four characters
A\rB\r      four characters

另外,如果您使用其中一个虚假角色(例如&#34; \ n&#34;,换行符)在角色周围绘制一个3x3矩形&#34; C&# 34;,你实际上会向输出发送三条空行(顶行),一行空行(中心行的左边界),一行&#34; C&#34;以及另外四行空行。

这可能很令人费解。

您没有在问题中说明您的问题实际上是 ,但如果上述任何一种症状都已知道,请检查您的输入程序。

其他问题

void printRectangleOne(int N, char C)
{
        int i;
        int j;
        for (i = 0; i <= N; i++)
        {
                // Why do you output this C here?
                fprintf(stdout, &C);
                // You are checking and incrementing i here, not j.
                for(j = 0; i <= N; i++)
                {
                     // fprintf does not work this way. Use
                     // putchar(C);
                     // instead.
                     fprintf(stdout, &C);
                }
        }
        // I don't think this is going to work. Use either
        // putchar('\n') or printf("\n") to get a newline.
        printf();
}

答案 1 :(得分:1)

我建议采用迭代方法。如果在没有编译的情况下一起运行编写代码,则调试将很困难。因此,从简单的完整程序开始。我认为问题描述清楚地表达了不同的任务。您可以先从菜单开始,然后确保它在向代码添加其他功能之前正常工作。这也为您提供了更好的学习和新功能。