你可以在c中为char分配一个没有scanf的默认名称吗?

Posted

技术标签:

【中文标题】你可以在c中为char分配一个没有scanf的默认名称吗?【英文标题】:Can you assign a char a default name without scanf in c? 【发布时间】:2015-01-25 13:46:57 【问题描述】:

我正在努力让我的游戏更具互动性,让玩家输入他们的名字并进行游戏。 有没有办法让它在没有玩家 2 的情况下,char player2 可以获得默认名称?

#define DEF "CPU"

printf(" Enter name for Player 1:\n");
scanf(" %s", &player1 );

printf("Is there a Player 2? [y/n]");
scanf(" %c", &mult);

if( mult == y)
    printf("Enter name for Player 2:\n");
    scanf(" %c", &player2);
else
    printf(" The CPU will be your opponent!\n");
    &player2 = DEF ;

【问题讨论】:

您现在有什么问题?你已经在问是否有玩家 2?! 首先阅读编译器错误/警告信息。然后修复它们。 @Rizier123,我想这样做,如果有玩家 2,他们的名字将在 scanf 提示符下输入。如果没有玩家 2,则默认为玩家 2 分配名称 CPU。 【参考方案1】:

这应该适合你:

#include <stdio.h>
#include <string.h>

#define DEF "CPU"

void clean_stdin(void) 
    int c;
    do 
        c = getchar();
     while (c != '\n' && c != EOF);


int main() 

    char player1[20], player2[20];
    char mult;


    printf("Enter name for Player 1:\n>");
    fgets (player1, 20, stdin);
    clean_stdin();

    printf("Is there a Player 2? [y/n]:");
    scanf(" %c", &mult);
    clean_stdin();

    if(mult == 'y') 
        printf("\nEnter name for Player 2:\n>");
        fgets (player2, 20, stdin);
     else 
        printf("\nThe CPU will be your opponent!\n");
        strcpy(player2, DEF);
    

    printf("\n\nPlayer 1: %s\nPlayer 2: %s", player1, player2);

    return 0;


【讨论】:

scanf 总是以空值终止它为%s 写入的字符串,因此明确的'\0' 分配是没有意义的。另一方面,它会读取尽可能多的字符,因此您可能需要使用%20s 来防止缓冲区溢出。 @Rizier123 很有帮助!虽然现在它完全跳过了“有玩家 2”部分。我输入播放器 1,然后程序的其余部分运行 @Rizier123,它仍然跳到最后。新线路有什么作用? @LeonardoOlvera 你确定吗?再测试一次!第二个问题也是y/n! @Rizier123,这个版本好多了!再次感谢您!

以上是关于你可以在c中为char分配一个没有scanf的默认名称吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c中为指向char的指针数组分配内存

在C中为char数组赋值

如何将char赋给const char *

如何在 xcode4 中为 iphone 分配默认横向图像

在C中为结构中的单个字符分配内存[重复]

为啥你可以在 Swift 中为可选类型分配非可选值?