将代码写在字符串上但在字符串旁边

时间:2018-12-20 22:19:57

标签: c arrays string

代码运行良好。但是当用户输入一个字符串时,它会写在同一位置。我希望它写在他旁边。例如5个长度的单词“ EARTH”和2个。 输入的是“火星”

我想要这样/////,但是现在就这样

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

    • 我尝试使用[^ \ 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 =在左上角思考。

Like this

2 个答案:

答案 0 :(得分:2)

  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;

答案 1 :(得分:0)

从您的声明中,

   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.
   .   .   .
}