喵宗 2022-09-12 10:50 采纳率: 77.8%
浏览 27
已结题

请哪位告诉我这里的问题?

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int x=0;
int y=10;
char input;

while(1)        
{
    system("cls");
for(j=0;j<y;j++)
printf("\n");
for(i=0;i<x;i++)
printf(" ");


 printf("*\n");
 
 scanf("%c",&input);
if(input=='s') 
    y++;
if(input=='w') 
    y--;
if(input=='a') 
    x--;
if(input=='d') 
    x++;

}
return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
int x=0;
int y=10;
char input;

while(1)        
{
    system("cls");

for(i=0;i<x;i++)
printf(" ");
for(j=0;j<y;j++)
printf("\n");

 printf("*\n");
 
 scanf("%c",&input);
if(input=='s') 
    y++;
if(input=='w') 
    y--;
if(input=='a') 
    x--;
if(input=='d') 
    x++;

}
return 0;
}
这两个代码中
for(j=0;j<y;j++)
printf("\n");
for(i=0;i<x;i++)
printf(" ");
前两个和后两个代码换下位置,而运行过程中第一个按a和d会左右移动而第二个不会移动了呢?

  • 写回答

1条回答 默认 最新

  • a5156520 2022-09-12 14:40
    关注

    因为第一份代码先打印由初识变量y控制的换行,然后打印有变量x控制的0个空格,然后打印一个星号再换行,等待输入移动命令,输入a或d就会把x的值增加或减少,然后等下次开始执行while循环开头的输出换行和输出空格实现显示出星号左右移动的功能,因为是先换行,再输出空格,所以第一份代码的左右移动可以显示出来(在换行输出后,空格输出没有被"覆盖",且和星号输出连接在一起输出, 上一次输入的x的值控制输出多少个空格实现星号左右移动);


    但第二份代码是先输出空格,再输出换行,所以由输出的空格没有和星号再一起输出,并且被后面的换行输出"覆盖"了显示,所以第二份代码输出的空格不能实现出星号左右移动的功能,星号永远在左边第一个位置。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 修改了问题 9月12日
  • 创建了问题 9月12日

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应