c - 从包含 int 和 char 的输入字符串中提取单个 char 和单个 int?
问题描述
我正在创建我的第一个项目——一个国际象棋游戏。现在,我让程序向用户询问一行和一列,如下所示:
White move.
column: F
row: 3
但是,我想让它更无缝一点,使它看起来像下面这样:
White move.
Input: F3
然后,它获取“F”并将其放入变量中,并获取“3”并将其放入单独的变量中。我看到了其他语言的解决方案,但我没有看到 C 语言的解决方案。有什么想法吗?
解决方案
@limserhane 的答案非常好。我只是想让您知道,如果您在之前放置一个空格%c
以丢弃缓冲区中可能由于用户输入错误或您没有完全阅读以前的输入而可能存在的任何空间,那会更好。
而且您还应该关心用户可能出现的错误,循环scanf
直到您没有得到有效的输入。
while( scanf(" %c%d", &c, &i) != 2 || c < 'A' || c > 'Z' || i < 1 || i > 8 ) puts("Invalid coordinates, please try again.");
并且还要注意清除缓冲区,以防用户输入的内容超出您的阅读范围%c%d
while( scanf(" %c%d", &c, &i) != 2 || c < 'A' || c > 'Z' || i < 1 || i > 8 ) {
while ((c = getchar()) != '\n'); // clear the buffer
puts("Invalid coordinates, please try again.");
}
推荐阅读
- angular - 使用 Input() 从父级接收角度子组件中的数据的事件
- php - Vue的Laravel后端未显示正确排序的数据
- ruby-on-rails - Rspec System Test 单独运行时通过,与整个套件一起运行时失败
- bootstrap-4 - 多项目轮播不显示
- c - 尝试计算函数的时间和存储复杂度 (C)
- java - 奇怪的 Java 线程冻结问题
- java - android.system.ErrnoException:读取失败:Android 5.0 中的 EAGAIN
- haskell - 如何创建非空列表?
- c# - 实体框架 6,验证未按预期工作
- angularjs - 背景颜色不会随着 angularjs 中的 ng-class 条件而改变