C读取错误的字符串数量

时间:2018-03-14 13:10:08

标签: c string

我正在尝试读取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

2 个答案:

答案 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()