你可以在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的默认名称吗?的主要内容,如果未能解决你的问题,请参考以下文章