【问题标题】:How can I add a space after the first printf statement?如何在第一个 printf 语句后添加空格?
【发布时间】:2016-06-26 01:51:52
【问题描述】:

C语言中的随机数猜谜游戏。

用户有 10 次猜测,如果没有猜到正确的数字,游戏将退出。

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

int main() {
int theNumber;
int userGuess;
int counter = 10;
int lowerBound = 1, upperBound = 100;

// seed function
srand((unsigned)time(NULL));

// generates number between 1 and 100
theNumber = lowerBound + rand() % (upperBound - lowerBound + 1);

printf("Please guess a number (1-100): ");

for (counter = 9; counter <= 10; counter--) {

    // get users guess
    scanf("%d", &userGuess);

    if (userGuess == theNumber) {
        printf("You guessed it! The number was: %d", theNumber);
        break;
    }

    if (userGuess < theNumber && counter >= 1)
        printf("Your guess was too low. You have %d guesses remaining. Guess higher: ", counter);

    if (userGuess > theNumber && counter >= 1)
        printf("Your guess was too high. You have %d guesses remaining. Guess lower: ", counter);

    if (counter == 0) {
        printf("\nYou ran out of guesses. The number was: %d \n", theNumber);
        break;
    }

}

return 0;

}

示例输出:

Please guess a number (1-100): 100
Your guess was too high. You have 9 guesses remaining. Guess lower: 90

如何在第一个 printf 语句之后添加一个空格,以使输出看起来像这样?

期望的输出:

Please guess a number (1-100): 100

Your guess was too high. You have 9 guesses remaining. Guess lower: 90

【问题讨论】:

  • 我试过了。如果我将 \n 放在第一个 printf 语句之后,用户首先猜测会中断到下一行,我不希望这种情况发生。如果可能的话,我希望它保持在第一行的右侧。
  • 认真的吗?为什么还要尝试?提示:如果你想在输入之后打印一些东西,在逻辑上打印之前输入是行不通的。
  • 我很抱歉。我有点困惑。你是说完成我想做的事情在逻辑上是不可能的?
  • printf("\n你的猜测太高了。你还有 %d 次猜测。猜低: ", counter);注意你的之前的\n
  • 空格不是编程中的换行符(但两者都是空白字符)。你要求换行,所以不要谈论空格。使用正确的短语可以大大提高问题的可读性和可理解性。

标签: c printf


【解决方案1】:

如果用户输入像“一个”这样的文本!会发生什么?
始终检查错误

if (scanf("%d", &userGuess) != 1){
    printf("incorrect input.\n");
    return 1;
}

如果您需要垂直空间,请使用printf("\n");
如果您只需要一次垂直空间,请使用:

if (counter == 9)
    printf("\n");

示例代码:

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

int main() {
    int theNumber;
    int userGuess;
    int counter = 10;
    int lowerBound = 1, upperBound = 100;

    // seed function
    srand((unsigned)time(NULL));

    // generates number between 1 and 100
    theNumber = lowerBound + rand() % (upperBound - lowerBound + 1);

    printf("Please guess a number (1-100): ");

    for (counter = 9; counter <= 10; counter--) {

        // get users guess
        if (scanf("%d", &userGuess) != 1){
            printf("incorrect input.\n");
            return 1;
        }
        //if (counter == 9)
        printf("\n");

        if (userGuess == theNumber) {
            printf("You guessed it! The number was: %d", theNumber);
            break;
        }

        if (userGuess < theNumber && counter >= 1)
            printf("Your guess was too low. You have %d guesses remaining. Guess higher: ", counter);

        if (userGuess > theNumber && counter >= 1)
            printf("Your guess was too high. You have %d guesses remaining. Guess lower: ", counter);

        if (counter == 0) {
            printf("\nYou ran out of guesses. The number was: %d \n", theNumber);
            break;
        }

    }

    return 0;
}

【讨论】:

    【解决方案2】:

    如果您询问这两行之间是否有一个新的空白行,您只需在第一个 printf 语句后添加printf("\n");即可。

    如果您想在任何地方放置空格,请使用printf(" ");这将在两者之间添加空格。

    使用 int 和 while 循环打印任意数量的空格或新的空白行。

    例子:

    int main()
    {
       int i;
       i = 0;
       while (i < 30)
       {
          printf(" ");
          i++;
       }
       printf("X\n");
       return 0;
    }
    

    【讨论】:

    • 定义main()的正确方法之一 - int main(void) {...}
    • @babon 感谢您的指出。您基本上要确保不传递任何参数。如果我是初学者,如果我错了,请纠正我。
    • () - 该函数采用未指定数量的参数。 (void) - 该函数绝对不需要任何参数。你可以拿着这段代码:hastebin.com/muyucoqafa.coffee 来玩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2023-02-22
    • 2021-04-08
    • 1970-01-01
    • 2019-08-08
    • 2018-11-07
    相关资源
    最近更新 更多