在c中格式化带变量的字符串

时间:2014-12-20 13:53:41

标签: c string

我在写c。我希望在运行时让一个角色在屏幕上移动。我正在考虑使用printf(),它可以使用%s在指定数量的空白区域后打印屏幕。

我将这个数字保存在一个变量中如何将%s用于变量非常数值

代码是

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

int main()
{
  int it=0;
  int tr;
  printf("T \n");
  srand(time(NULL));
  while(it != 80 )
  {
   tr=rand()%3+1;
   switch(tr)
   {
       int tmove=it;
       case 1 :{
           if(80-it>1)
           {
               tmove+=1;
               it+=1;
           }
           else it=80;
          break;}
       case 2 :{
           if(80-it>2)
            {
                tmove=+2;
                it+=2;
            }
           else it=80;
          break;}
       case 3 :{
           if(80-it>3)
           {
               tmove+=3;
               it+=3;
           }
           else it=80;
          break;}
            default:break;
   }
   printf("%s","T");
 }
 }

我希望在白色数量等于移动后打印T。

2 个答案:

答案 0 :(得分:3)

使用长度格式说明符

printf("%*s%s\n", tmove, " ", "T");

另外,请注意每个开关盒都可以这样写入

if (80 - it > tr)
{
    tmove += tr;
    it    += tr;
}
else
    it = 80;

因此,你真的不需要switch你可以写

tr = rand() % 3 + 1;
if (80 - it > tr)
{
    tmove += tr;
    it    += tr;
}
else if (it > 3) /* for the default case of the switch */
    it = 80;

所以整个程序转换为

int main()
{
    int it = 0;
    int tr;

    printf("T\n");

    srand(time(NULL));
    while (it != 80 )
    {
        int tmove = it;
        tr = rand() % 3 + 1;
        if ((80 - it) > tr)
        {
            tmove += tr;
            it    += tr;
        }
        else if (it > 3)
            it = 80;
        printf("%*s%s", tmove, " ", "T");
    }
    return 0;
}

判断代码中的第一个printf以及tmove总是在增加的事实我会说你还需要第二个printf中的换行符,即输出看起来很有趣,它是什么?

int main()
{
    int it = 0;
    int tr;

    printf("T\n");

    srand(time(NULL));
    while (it != 80 )
    {
        int tmove = it;
        tr = rand() % 3 + 1;
        if ((80 - it) > tr)
        {
            tmove += tr;
            it    += tr;
        }
        else if (it > 3)
            it = 80;
        printf("%*s%s\n", tmove, " ", "T");
    }
    return 0;
}

再提示一下,将3变为一个变量,以便在需要无需更改时随意修改

int main()
{
    int it = 0;
    int tr;
    int maximum = 3;

    printf("T\n");

    srand(time(NULL));
    while (it != 80 )
    {
        int tmove = it;
        tr = rand() % maximum + 1;
        if ((80 - it) > tr)
        {
            tmove += tr;
            it    += tr;
        }
        else if (it > maximum)
            it = 80;
        printf("%*s%s\n", tmove, " ", "T");
    }
    return 0;
}

这是maximum = 3

的一次输出
T
  T
    T
      T
       T
         T
            T
             T
               T
                T
                 T
                  T
                   T
                     T
                      T
                         T
                            T
                              T
                               T
                                  T
                                     T
                                        T
                                         T
                                          T
                                           T
                                            T
                                              T
                                               T
                                                 T
                                                   T
                                                      T
                                                        T
                                                          T
                                                             T
                                                               T
                                                                 T
                                                                   T
                                                                    T
                                                                     T
                                                                      T
                                                                       T
                                                                        T
                                                                          T
                                                                            T
                                                                               T
                                                                               T

答案 1 :(得分:0)

你可以通过添加clrscr()来使用函数#include <conio.h>并创建变量nb以进行左移,之后你可以在变量name中打印名称实例,

printf("%*s",nb,name);

你可以将所有这些放在一个循环中,每次都清除屏幕,增加nb变量,最后打印name你可以看到它移动

对于那些使用linux的人

要使用清除屏幕,您需要添加#include <stdlib.h>并制作system("clear screen")