Код, записывающий строку в строку, но рядом с ней - PullRequest
0 голосов
/ 21 декабря 2018

Код работает хорошо.Но когда пользователь вводит строку, он пишет в том же месте. Я хочу, чтобы она писала рядом с ним.как 5 длинное слово «EARTH» и 2. вход «MARS»

Я хочу, как это /////, но это происходит, как это сейчас

  • массив [0]= 'E' //// - массив [0] = M
  • массив [1] = 'A' //// - массив [0] = A
  • массив [2]= 'R' //// - массив [0] = R
  • массив [3] = 'T' //// - массив [0] = S
  • массив [4]= 'H' //// - массив [0] = H
  • массив [5] = ''
  • массив [6] = 'M'
  • массив [7] = 'A'
  • массив [8] = 'R'
  • массив [9] = 'S'

    • Iпытался использовать это [^ \ n] думать, но это не сработало (я думаю, я не могу сделать это правильно)

    • Я пытался Scanf (

    • Я попытался getline ()

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

         char str[10][20];

         void getting_veriables(),printing();



        int main (){

         getting_veriables();
         printing();
         }

        void printing() {

        int x,y;    
        for(x = 0;x<10;x++){
        printf("\n");
        for(y = 0;y<20;y++){
        printf(" |%c| ",str[x][y]);
              }
            }
          }

          void getting_veriables(){
          int length=0,limit,a=0;

           printf("How many word's you will enter ? : ");
        scanf("%d",&limit); 
            // taking how much word will be enter

            if(limit<=10 && limit>=3){ 
            a=1;
            }
            else{
        printf("You can enter min 3 max 10 words\n");
        a=0; // I will replace it with exit think.
        system("PAUSE");
        }

            for(;limit!=0 && a==1;limit--){

            fflush(stdin);
            printf("Please enter your words : ");
            gets(str); // the problem is here i think.
            length = strlen(str); // taking lenght of the word.


            if(length > 20 || length < 3)
            {
            printf("Your number must be between 3-20 lenght\n");
            exit(1);
             }
           }
         }

Он пишет: «Ввод 1 = Пример Ввод 2 = Думать в левом верхнем углу.1046 *Like this

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Из вашего объявления

   char str[10][20];

Похоже, что вы намерены хранить не более 10 строк, каждая длиной не более 20 символов.

И ваше предположение о том, гдепроблема может быть в том, что она выглядит правильно.

    gets(str); // the problem is here i think.

gets (str) - это то же самое, что и gets (& str [0]), и в итоге вы читаете один и тот же индекс снова и снова.Вы можете исправить это, переписав цикл for, как показано ниже -

for(i=0; i<limit && a==1; i++){
    .  .   .
    gets(str[i]); // the problem is here i think.
    length = strlen(str[i]); // taking lenght of the word.
   .   .   .
}
0 голосов
/ 21 декабря 2018
  1. Избегайте использования gets, он устарел и опасен.

  2. Вы записываете все свои данные в одну и ту же ячейку памяти, str, чтобудет перезаписывать ваши старые данные, как вы испытываете.Вы хотите записать свой второй вход после первого, поэтому вам нужно добавить длину первого ввода в str:

Пример:

gets(str + length);
// "EARTH\0\0\0\0"
//  ^ str               // 1st input gets stored starting here
//       ^ str + length // 2nd starting here

Затем вы также хотите увеличить длину, вместо ее переопределения:

length += strlen(str)

Если вы хотите добавить пробел, вы просто увеличиваете length:

str[length] = ' ';
length += 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...