Покажите пример с созданием меню выбора - C (СИ)

  1. покажите пример с созданием меню выбора в си (*.C) (case,switch)


textual

Код:

#include <stdio.h>
int main(void)
{
int z;
printf("Меню:\n");
printf("1 пункт\n2 пункт\n3 пункт");
printf("\nвведите пункт меню:\n\n");
scanf("%d",&z);
switch(z)
{
case 1: printf("вы выбрали 1 пункт"); break;
case 2: printf("вы выбрали 2 пункт"); break;
case 3: printf("вы выбрали 3 пункт"); break;
}
return 0;
}


Похожие ответы
  1. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 #include "stdafx.h" #include "stdlib.h" #include "stdio.h" #include "conio.h" #include "math.h" #include "locale.h" #include "string.h" #include "time.h" #define pause system("pause")   void printarr(int **, int ); void bubblesort(int *, int ); void printarr1(int *, int );   int main() {     setlocale(LC_ALL, "RUS");     int n, i, j,q,w,e,c=0,r=0,h=0, **px,*pw;     srand(time(NULL));     printf("Добро пожаловать в лабораторную работу №7!\n");     printf("Задание: На основе исходного двумерного массива С с рабочим размером n x n, сформировать одномерный массив А.");     printf("Массив А должен содержать только те числа, которые встречаются в массиве С более одного раза. Упорядочить массив А по убыванию, используя метод "пузырька". Вывести Массивы С и А на экран.");     printf("Массивы А и С должны состоять из целых чисел. Значение n вводится пользователем с клавиатуры. Значения элементов Массива С генерируются при помощи датчика случайных чисел\n");     printf("Введите значение n:");     scanf_s("%d", &n);     printf("\n");     px = ((int**)malloc(n*n*sizeof(int)));     if (!px)     {         printf("Память не выделена\n");         pause;         exit(0);     }         for (j = 0; j < n; j++) {             px[j] = (int*)malloc(n * sizeof(int));             if (!px[j])             {                 printf("Память не выделена\n");                 pause;                 exit(0);             }         }         for (i = 0; i < n; i++) {                       for (j = 0; j < n; j++)                 px[i][j] = (rand() % 10);         }         printarr(px, n);         pw = (int*)malloc(n*n * sizeof(int));         for (i = 0; i < n; i++) {             for (j = 0; j < n; j++) {                 for (q = 0; q < n; q++) {                     for (w = 0; w < n; w++) {                         if (px[i][j] == px[q][w])                             h++;                     }                       }                 if (h > 1) {                     for (e = 0; e < c; e++) {                         if (px[i][j] == *(pw + e))                         {                             r++;                         }                     }                     if (r == 0) {                         *(pw + c) = px[i][j];                         c++;                     }                 }                 h = 0;                 r = 0;             }         }         printf("\n");         printf("Массив А до сортировки:\n");         printarr1(pw,c);         printf("\n");         bubblesort(pw, c);         printf("Массив А после сортировки:\n");         printarr1(pw, c);         free(px);         free(pw);         pause;         return 0; }           void printarr(int **arr, int a)         {             int i, j, x;             printf("Массив C размером n x n\n");             for (i = 0; i < a; i++) {                 for (j = 0, x = 1; j < a; j++, x++)                     printf("%d ", arr[i][j]);                 printf("\n");             }         }                 void printarr1(int *arr, int a)         {             int i;             for (i = 0; i < a; i++) {                           printf("%d ", *(arr + i));             }             printf("\n");         }                 void bubblesort(int *arr, int a)         {             int i, j=0,k;             for (k = 0; k < a-1; k++) {                 for (i = 0; i < a-1; i++) {                     if ( arr[i] < arr[i+1]){                         j = arr[i];                         arr[i] = arr[i+1];                         arr[i+ 1] = j;                     }                       }             }         }

  1. // draw move initgr как неопознанные, можно как-нибудь запустить данный код? Пользуюсь Visual Studio проект Win 32C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 main() {     float xA, yA, xB, yB, xC, yC, xD, yD, xxA, yyA, xxB, yyB, xxC, yyC, xxD, yyD, p, q;     int i;     p = 0.95;     q = 1.0 - p;     xA = 2.0;     xB = 8.0;     xC = 8.0;     xD = 2.0;     yA = 0.5;     yB = 0.5;     yC = 6.5;     yD = 6.5;     initgr();     for (i = 0; i < 50; i++)     {         move(xA, yA);         draw(xB, yB);         draw(xC, yC);         draw(xD, yD);         draw(xA, yA);         xxA = p * xA + q * xB;         yyA = p * yA + q * yB;         xxB = p * xB + q * xC;         yyB = p * yB + q * yC;         xxC = p * xC + q * xD;         yyC = p * yC + q * yD;         xxD = p * xD + q * xA;         yyD = p * yD + q * yA;         xA = xxA;         xB = xxB;         xC == xxC;         xD = xxD;         yA = yyA;         yB = yyB;         yC = yyC;         yD = yyD;     }     endgr(); }Пример взят из:http://sci.sernam.ru/book_graph.php?id=3

  1. Как вернуть значение, например строки, в адекватном состоянии, если до этого двигал указатели? На ум только приходит двигать обратно или создать до того, как двигаешь, ещё один указатель, которому присваиваешь начальный адрес? Есть какие-нибудь ещё нормальный варианты?

  1. Не понимаю почему эта конструкция работает: Имеется код: Кликните здесь для просмотра всего текста C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 void GenericTCPServer(void) {     BYTE i;     WORD w, w2;     BYTE AppBuffer[32];     WORD wMaxGet, wMaxPut, wCurrentChunk;     static TCP_SOCKET   MySocket;     static enum _TCPServerState     {         SM_HOME = 0,         SM_LISTENING,         SM_CLOSING,     } TCPServerState = SM_HOME;       switch(TCPServerState)     {         case SM_HOME:             // Allocate a socket for this server to listen and accept connections on             MySocket = TCPOpen(0, TCP_OPEN_SERVER, SERVER_PORT, TCP_PURPOSE_GENERIC_TCP_SERVER);             if(MySocket == INVALID_SOCKET)                 return;               TCPServerState = SM_LISTENING;             break;           case SM_LISTENING:             // See if anyone is connected to us             if(!TCPIsConnected(MySocket))                 return;                 // Figure out how many bytes have been received and how many we can transmit.             wMaxGet = TCPIsGetReady(MySocket);  // Get TCP RX FIFO byte count             wMaxPut = TCPIsPutReady(MySocket);  // Get TCP TX FIFO free space               // Make sure we don't take more bytes out of the RX FIFO than we can put into the TX FIFO             if(wMaxPut < wMaxGet)                 wMaxGet = wMaxPut;               // Process all bytes that we can             // This is implemented as a loop, processing up to sizeof(AppBuffer) bytes at a time.               // This limits memory usage while maximizing performance.  Single byte Gets and Puts are a lot slower than multibyte GetArrays and PutArrays.             wCurrentChunk = sizeof(AppBuffer);             for(w = 0; w < wMaxGet; w += sizeof(AppBuffer))             {                 // Make sure the last chunk, which will likely be smaller than sizeof(AppBuffer), is treated correctly.                 if(w + sizeof(AppBuffer) > wMaxGet)                     wCurrentChunk = wMaxGet - w;                   // Transfer the data out of the TCP RX FIFO and into our local processing buffer.                 TCPGetArray(MySocket, AppBuffer, wCurrentChunk);                                 // Perform the "ToUpper" operation on each data byte                 for(w2 = 0; w2 < wCurrentChunk; w2++)                 {                     i = AppBuffer[w2];                     if(i >= 'a' && i <= 'z')                     {                         i -= ('a' - 'A');                         AppBuffer[w2] = i;                     }                     else if(i == 0x1B)   //escape                     {                         TCPServerState = SM_CLOSING;                     }                 }                                 // Transfer the data out of our local processing buffer and into the TCP TX FIFO.                 TCPPutArray(MySocket, AppBuffer, wCurrentChunk);             }               // No need to perform any flush.  TCP data in TX FIFO will automatically transmit itself after it accumulates for a while.  If you want to decrease latency (at the expense of wasting network bandwidth on TCP overhead), perform and explicit flush via the TCPFlush() API.               break;           case SM_CLOSING:             // Close the socket connection.             TCPClose(MySocket);               TCPServerState = SM_HOME;             break;     } } это функция вызывается постоянно из другого кода где крутится в бесконечном цикле:C1 2 3 4 5 6 7 8 9 10 11 12 while(1) { .... /*do something*/ ... #if defined(STACK_USE_GENERIC_TCP_SERVER_EXAMPLE)   //у меня он дефайн, то есть определён GenericTCPServer(); //и вызывается эта функция #endif ... /*do something*/ ... }так вот в чём состоит не понимание: не понимаю как переключается switch ведь при первоначальной инициализации создаётся именованный список и его значение приравнивается к SM_HOME, соответственно выполнение switch идёт по ветке case SM_HOME и если всё нормально (MySocket не равен INVALID_SOCKET), то TCPServerState становится равным SM_LISTENING и дальше идёт break, то есть выход из switch и на этом функция заканчивается, никакого перехода на SM_LISTENING не будет (или я чего-то не понимаю??). Но как он может попасть на SM_LISTENING??? хоть убей не понимаю, даже если взять то, что у нас эта функция вызывается постоянно, то она при каждом вызове будет создавать именованный список с значением TCPServerState равным SM_HOME и мы всё равно не попадём в другие ветки switch.. В общем если кто-то сможет объяснить буду очень рад. Если что-то не понятно пишите

  1. C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 /*Списал код с книги. Visio 2012 не может его даже скомпилировать, а GCC не выводит результат(аварийно завершается программа), подскажите в чём дело? */ #include #include #define S 4 #define C 4 int sum(int rows, int cols, int ar[rows][cols]); void main(void) {     int x, y;     int rs = 4, we = 5;     int massiv1[S][C] = {         {5, 120, -100, 0},         {20, 120, -30, -1000},         {304, -459, 234, 32432},         {342, -213, 543, -324}     };       int massiv2[S + 2][C - 1] = {         {34, -23, 453},         {543, -213, 546},         {234, 53, -23},         {0 ,543, -3},         {34 ,-45, 213},         {0, 324, -23}     };       int massiv3[x][y];     for(x = 0; x < rs; x++)         for(y = 0; y < we; y++)             massiv3[x][y] = x * y + y;       printf("summa massiv1[4][4] = %d\n", sum(S, C, massiv1));     printf("summa massiv2[6][3] = %d\n", sum(S + 2, C - 1, massiv2));     printf("summa massiv3[4][5] = %d\n", sum(rs, we, massiv3));     getch(); return; }   int sum(int rows, int cols, int ar[rows][cols]) {     int summa = 0;     int q, a;     for(q = 0; q < rows; q++)         for(a = 0; a < cols; a++)             summa += ar[q][a]; return summa; }

  1. Покажите пожалуйста. пример кода с прерыванием цикла while или do while например вводить два числа(это все в цикле), и завершать ввод нажатием на какую-нибудь клавишу.Заранее спасибо)

  1. C++1 2 3 4 5 6 7 8 9 10 11 12 #include   int main( void ) {    int i, a = 0;      for( i = 0; i<5; i++)    {        a = (a++)%2;        printf( "a = %d\n", a);    } }Если кто то ожидает вывода 1 0 1 0 1, то обломается. Компилятор пропускает скобки. Микрософт и Интел дают 1 2 1 2 1 а ГЦЦ 0 0 0 0 0

  1. Переписал вот такой вот код из учебника по c ansi от Денниса Ритчи и Брайана Кернигана:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include #define MAXLINE 1000 //Максимальная длина строки в потоке   int getline(char line[], int maxline); void copy(char to[], char from[]);   //вывод самой длинной строки в потоке main(){     int len; //длина текущей строки     int max; //текущая максимальная длина     char line[MAXLINE]; //текущая введённая строка     char longest[MAXLINE]; //самая длинная строка из введённых       max=0;     while ((len = getline(line, MAXLINE)) > 0)         if (len > max) {             max = len;             copy(longest, line);         }         if (max > 0) //была непустая строка             printf("%s", longest);         return 0;         } }   //getline: считывает строку в s, возвращает её длину int getline(char s[], int lim){     int c, i;       for (i = 0; i cd c ancient@NickolayPC:~/c > gcc 1. 1.7.c  1.9.c   ancient@NickolayPC:~/c > gcc 1.9.c 1.9.c:4:5: error: conflicting types for ‘getline’  int getline(char line[], int maxline);      ^ In file included from 1.9.c:1:0: /usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here  extern _IO_ssize_t getline (char **__restrict __lineptr,                     ^ 1.9.c:24:1: error: expected identifier or ‘(’ before ‘}’ token  }  ^ 1.9.c:27:5: error: conflicting types for ‘getline’  int getline(char s[], int lim){      ^ In file included from 1.9.c:1:0: /usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here  extern _IO_ssize_t getline (char **__restrict __lineptr,                     ^ ancient@NickolayPC:~/c >Я немного недопонимаю - как это в коде из УЧЕБНИКА может быть ошибка? Я же всё правильно переписал. Разве что, начинающую скобку в функции писал не на отдельной строке, а в строке обьявления функции (так можно делать. Позаимствовал ещё с джавы)

  1. Добры день. Начал читать книгу "Язык программирования Си" Брайан Керниган, Деннис Ритчи; для лучшего усвоения использую приведенные примеры. Есть загвоздка. Нужны комментарии, чтобы разобраться. 1. Вот кусок кода из примера:C1 2 3 4 #include #define MAXLINE 1000 /* максимальный размер вводимой строки */ int getline(char line[], int MAXLINE); void copy(char to[], char from[]);При компиляции выдаёт ошибку, что перед константой надо разделитель поставить. 2. Убрал константу из объявления функции, но теперь при компиляции проблема с типом переменных для функции getline().C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include #define MAXLINE 1000   int getline(char linef[], int counter); void copy(char tot[], char fromf[]);     main() {     FILE *file;     char name[100];     scanf("%s",name);     file = fopen(name,"r");       int len;     int max;     char line[MAXLINE];     char longest[MAXLINE];     max = 0;     while ((len = getline(line, MAXLINE)) > 0)     if (len > max) {         max = len;         copy(longest, line);     }     if (max > 0)     printf("%s", longest);     return 0; }     int getline(char s[], int lim) {     int c, i;     for (i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; ++i)     s[i] = c;     if (c == '\n') {         s[i] = c;         ++i;     }     s[i] = '\0';     return i; }     void copy(char to[], char from[]) {     int i;     i = 0;     while ((to[i] = from[i]) != '\0')     ++i; }

  1. Найдите и объясните ошибки в следующем примере:C1 2 3 4 5 6 7 8 9 union values {   char w;   float x;   double y;   } V = {1.27};