2016-02-07 4 views
-3

Мне нужно написать программу на C (которую я новичок), чтобы пользователь вводил количество строк и столбцов и символ, который они должны отображать в качестве прямоугольника, ex : 6 строк и 6 столбцов звездочки.Создайте прямоугольник на основе ввода символа пользователя

Вот задание в деталях.

Первое, что сделает ваша программа, это распечатать меню выбора для пользователя . Вы можете выбрать собственную версию формулировки или порядка представленных вариантов, но каждый выбор, указанный в меню, должен соответствовать следующим образом: Функция, которая предлагает пользователю ввести один символ . Возвращаемое значение функции является символом char и возвращает значение символа, введенное пользователем. Это возвращаемое значение будет , сохраненное в локальной переменной C в main(). Начальным значением по умолчанию этот символ будет '' (пробел или пробел).

Функция, которая предлагает пользователю ввести числовое значение между 1 и 15 (включительно). Если пользователь вводит значение за пределами этого диапазона, пользователю будет предложено повторно ввести значение до ввода правильного значения. Возвращаемое значение функции будет int и вернет значение , введенное пользователем. Это возвращаемое значение будет храниться в локальной переменной , N, в main(). Начальное значение по умолчанию этого символа будет равно 0.

Два «Прямоугольника печати». Каждая функция принимает текущее значение целочисленное значение N и значение символа C в качестве входных параметров. Возврат значения этих функций будут недействительными. Функции будут печатать прямоугольников из N строк и столбцов с использованием символа ввода C. Функция Border Only будет печатать прямоугольник только с границей . Функция Filled In будет печатать прямоугольник в виде сплошного прямоугольника . Например, если целое значение N = 6, и символ значение C = «*» и заполненного типа называется следующая прямоугольник будет напечатано:

Вот мой код до сих пор, Я хочу знать, что я делаю неправильно, и правильно ли кодирую программу.

 #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) 
{ 

} 
+1

Итак, какова ваша конкретная проблема? – LSerni

+1

В функции printRectangleOne посмотрите на второй цикл: for (j = 0; i <= N; i ++) Существует сочетание j и i –

+1

Как переменные 'C' и' N' когда-либо меняются? –

ответ

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: 

и вы наберете:

ВведитеBВведите

и вы ожидаете, что два персонажа, чтобы быть и B. То, что действительно находится во входной очереди, может быть, в зависимости от платформ (я не обязательно):

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

Кроме того, если вы используете один из этих ложных символов (например, «\ n», которая равна newline), чтобы нарисовать прямоугольник 3x3 вокруг символа «C», вы фактически отправите на выход три пустые строки (верхнюю строку), одну пустую строку (левая граница центральной линии), «С» и еще четыре пустые строки.

Это может быть довольно озадачивающим.

Вы не указали в своем вопросе, какова ваша проблема на самом деле -, но проверьте свои процедуры ввода, если какой-либо из вышеперечисленных симптомов станет известен.

Другие проблемы

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

Я предлагаю итеративный подход. Если вы запустите код записи вместе без компиляции, то отладка будет сложной. Следовательно, начните с простой полной программы. Я думаю, что описание проблемы ясно с различными задачами. Сначала вы можете начать с меню, а затем убедиться, что он отлично работает, прежде чем добавлять в свой код еще одну функцию. Это также обеспечивает вам лучшее обучение и новые функции.

+0

Я оставляю свой ответ, поскольку он содержит некоторые указатели, которые, как мне кажется, полезны, но я поддерживаю ваш, потому что вы предложили правильный ** подход **, который будет намного более полезен для OP, чем исправление этой одной программы. – LSerni

Смежные вопросы