Pascal Can';我不能让帕斯卡正常工作

Pascal Can';我不能让帕斯卡正常工作,pascal,Pascal,以下代码有什么问题?当我输入一个数字时,它崩溃了 我花了两个多小时试图弄明白,但仍然不能,我正在学习帕斯卡,所以请容忍我 Program Game; var PlayerOneScore: Integer; PlayerTwoScore: Integer; BallsNo: Integer; CurrentScore: Integer; Ptr: Integer; Result: Integer; Begin CurrentScore := 0; Player

以下代码有什么问题?当我输入一个数字时,它崩溃了

我花了两个多小时试图弄明白,但仍然不能,我正在学习帕斯卡,所以请容忍我

Program Game;

var
  PlayerOneScore: Integer;
  PlayerTwoScore: Integer;
  BallsNo: Integer;
  CurrentScore: Integer;
  Ptr: Integer;
  Result: Integer;

Begin
  CurrentScore := 0;
  PlayerOneScore:= 0;
  PlayerTwoScore:= 0;
  Writeln('How many balls do you wish to face?');
  Readln(BallsNo);
  Ptr:=BallsNo;
  While Ptr < 1 Do
  Begin
    Repeat
      Ptr:=Ptr+1;
      CurrentScore:=0;
      Writeln ('Player turn');
      Writeln ('Please roll the bowling die');
      Writeln ('Enter 1 if result is a 1');
      Writeln ('Enter 2 if result is a 2');
      Writeln ('Enter 3 if result is a 4');
      Writeln ('Enter 4 if result is a 6');
      Writeln ('Enter 5 if result is a 0');
      While BallsNo >0 Do
      Begin
        Repeat
          Writeln('This is',BallsNo);
          Readln(Result);
          BallsNo:=BallsNo-1;
        Until BallsNo = 0;
        If Result = 1 Then
          CurrentScore:= CurrentScore+1
        Else If Result = 2 THEN
          CurrentScore:= CurrentScore+2
        Else If Result = 3 THEN
          CurrentScore:= CurrentScore+4
        Else If Result = 4 THEN
          CurrentScore := CurrentScore+6
      End;
    Until Ptr=2;
  End;

  If Ptr = 1 Then
    PlayerOneScore := CurrentScore
  Else
    PlayerTwoScore := CurrentScore;
  If PlayerOneScore > PlayerTwoScore Then
    Writeln('Player One Wins');
  If PlayerTwoScore > PlayerOneScore Then
    Writeln('Player Two Wins');
  If PlayerOneScore = PlayerTwoScore Then
    Writeln('Tie');
End.
程序游戏;
变量
分数:整数;
PlayerTwoScore:整数;
BallsNo:整数;
当前分数:整数;
Ptr:整数;
结果:整数;
开始
当前分数:=0;
总分:=0;
PlayerTwoScore:=0;
Writeln(‘你想面对多少球?’);
Readln(BallsNo);
Ptr:=BallsNo;
当Ptr<1时
开始
重复
Ptr:=Ptr+1;
当前分数:=0;
Writeln(“玩家回合”);
Writeln(‘请滚动保龄球骰子’);
Writeln('如果结果为1,则输入1');
Writeln('如果结果为2,则输入2');
Writeln('如果结果为4,则输入3');
Writeln('如果结果为6,则输入4');
Writeln('如果结果为0,则输入5');
而BallsNo>0做什么
开始
重复
书面语(“这是”,BallsNo);
Readln(结果);
BallsNo:=BallsNo-1;
直到BallsNo=0;
如果结果=1,则
CurrentScore:=CurrentScore+1
否则,如果结果=2,则
CurrentScore:=CurrentScore+2
否则,如果结果=3,则
CurrentScore:=CurrentScore+4
否则,如果结果=4,则
当前分数:=当前分数+6
结束;
直到Ptr=2;
结束;
如果Ptr=1,则
玩家分数:=当前分数
其他的
PlayerTwoScore:=当前分数;
如果PlayerScore>PlayerWoScore,则
Writeln(“玩家一胜”);
如果PlayerTwoScore>PlayerTwoScore,则
Writeln(“玩家两胜”);
如果playerScore=PlayerTwoScore,则
书面形式(“领带”);
结束。
Ptr:=1; 当Ptr<1时


这是你的问题。我认为您必须将1替换为BallsNo。

CurrentScore并不总是初始化的。 尝试在第一个“开始”之后插入“CurrentScore:=0;”

还有,你怎么知道它要崩溃了? 也许它只是不打印任何东西。 如果在“结束”之前添加“if PlayerOneScore=PlayerTwoScore然后Writeln('Tie')”,会发生什么情况?

请不要说“它崩溃了”。它会给你一些错误信息,是什么

你也遇到了一个问题,不管是哪位选手,你的分数都是零。不过,这不会导致崩溃。

更改

而Ptr<1

当Ptr>1时

在算法的后面有一个错误的循环


-干杯

它只是在我输入一个数字后崩溃,exe关闭。你误解了JLF的答案,你应该在while语句中替换“1”。赖斯:我已经冒昧地重新格式化了你的源代码。我不是想把我的格式风格强加给你,只是觉得这样会更可读。你打开运行时检查了吗?这是Pascal在进行错误搜索时的一个优点,但对我来说效果很好。您可能有编译器问题,请尝试在上编译。另外,readln可以返回整数和字符串,所以这不是问题所在。如果你的程序只是崩溃,没有给出任何消息,那肯定是编译器的问题。它编译得很好,但当我运行exe时,它问我有多少个球,我输入一个数字,它就会崩溃。@Freddie Rice:你认为它为什么会崩溃?由于这种情况,
Ptr<1
,很可能您的程序在执行循环时从未进入外部
。下面是您建议的更改的exe。尝试键入一个数字,然后它输出tie,然后崩溃并关闭。为什么你这么确信它会崩溃。您声明没有错误消息;您对该答案的修改表明,在接受一个数字后,该计划即将结束;并且还指示程序正在完成和终止。这个项目不仅仅是在完成吗?