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