我正在尝试读取3个字符串(3行),其中第一个行 - 播放器1的卡片,第二个行 - 播放器2的卡片,第三张线 - 牌中的牌。问题是C只读取前两行而 跳过 读取卡片组。 `
char firstPlayerCards [5];
char secondPlayerCards [5];
char deck [14];
fgets(firstPlayerCards, sizeof(firstPlayerCards),stdin);
fgets(secondPlayerCards, sizeof(secondPlayerCards),stdin);
fgets(deck, sizeof(deck),stdin);
printf("%s",firstPlayerCards);
printf("%s",secondPlayerCards);
printf("%s",deck);`
输入就像:
5h 5d
7h As
2h 8d 4h Jh Ah
答案 0 :(得分:1)
您需要更大的阵列。
每个玩家的手牌都是5个字符,应该以5个字节存储 加上一个字节来保存空终止符。 因此,每个阵列至少需要6个字节才能握住手。
fgets(firstPlayerCards, 5, stdin)
只有在你调用它时才能读取4个字节
User {#399 ▼
-uid: 1
-name: "Elie"
-lastname: "XXXXX"
-birthdate: DateTime @821919600 {#410 ▶}
-email: "xxxxxxxxx@xxxxxx.xx"
-password: "$2y$13$QAdyMal7VZmXzR3IwCFHYeDKokW0bRqko5rZHPtnhrbncdVVAr7E."
-salt: null
-roles: "ROLE_ADMIN"
-username: "Elie"
-accounts: PersistentCollection {#256 ▼
-snapshot: []
-owner: User {#399}
-association: array:16 [ …16]
-em: EntityManager {#213 …11}
-backRefFieldName: "user"
-typeClass: ClassMetadata {#401 …}
-isDirty: false
#collection: ArrayCollection {#419 ▼
-elements: []
}
#initialized: false
}
}
为了避免在写入空字符时出现未定义的行为。
所以你没有阅读你想要的输入。
答案 1 :(得分:0)
确保NameValues = []
AgeValues = []
def Insert(self):
Name = [self.NameValues[i].get() for i in range(len(self.NameValues))]
Age =[self.AgeValues[i].get() for i in range(len(self.AgeValues))]
Code = self.MemberCode.get()
print (Age)
和firstPlayerCards
有足够的内存来存储用户输入字符串。当您显示示例输入时,secondPlayerCards
有5个字符加上新行,并且您声明5h 5d
只有5个字符,请将其更改为7。
来自firstPlayerCards
fgets()从流中读取最多一个小于大小的字符 和 将它们存储到s指向的缓冲区中。读后停止了 EOF或换行符。如果读取换行符,则将其存储到缓冲区中。 终止空字节(' \ 0')存储在最后一个字符之后 缓冲区。
例如
fgets()