arrays - 基于输入的数组操作
问题描述
我在做一个项目时遇到了一个问题,并设法追踪到这一点:
#include <stdio.h>
void printme(char *data) {
for (int i = 0; i < 9; i++) {
printf("%c ", data[i]);
}
printf("\n");
}
int main() {
char data[9]; for(int i=0;i<9;i++){data[i]='0';}
char in[2];
printme(data);
for (int i = 0; i < 2; i++) {
scanf("%c", &in[i]); getchar();
}
for (int i = 0; i < 2; i++) {
printf("in[%d] = %d\n", i, in[i]);
}
for (int i = 0; i < 2; i++) {
data[in[i]] = 'X';
}
printme(data);
return 0;
}
我正在尝试使用我得到的输入作为数组的索引data
。但它似乎不起作用,0
无论我输入什么都打印 s 。我会错过什么?
感谢您的时间。
解决方案
你需要
切换
char
到int
:int in[2];
而不是char in[2];
扫描一个数字,而不是一个字符
你的代码工作:
#include <stdio.h>
void printme(char *data) {
for (int i = 0; i < 9; i++) {
printf("%c ", data[i]);
}
printf("\n");
}
int main() {
char data[9]; for(int i=0;i<9;i++){data[i]='0';}
int in[2];
printme(data);
for (int i = 0; i < 2; i++) {
scanf("%d", &in[i]);
}
for (int i = 0; i < 2; i++) {
printf("in[%d] = %d\n", i, in[i]);
}
for (int i = 0; i < 2; i++) {
data[in[i]] = 'X';
}
printme(data);
return 0;
}
如果出于某种原因您被迫使用,char
那么您需要减去 ASCII 值:
#include <stdio.h>
void printme(char *data) {
for (int i = 0; i < 9; i++) {
printf("%c ", data[i]);
}
printf("\n");
}
int main() {
char data[9]; for(int i=0;i<9;i++){data[i]='0';}
char in[2];
printme(data);
for (int i = 0; i < 2; i++) {
scanf(" %c", &in[i]);
}
for (int i = 0; i < 2; i++) {
printf("in[%d] = %d\n", i, in[i]);
}
for (int i = 0; i < 2; i++) {
data[in[i] - '0'] = 'X'; // this transforms ASCII char to his
// integer representation
}
printme(data);
return 0;
}
推荐阅读
- vb.net - 从 Microsoft Access 数据库更新 ComboBoxes 中的项目
- javascript - 在具有相等动态边距的表格结构中对 div 进行排序
- android - Android - 使用 Room DB 的主键 ID 以 1000 开头
- python - screen 根据相应 span 中的其他文本值和漂亮的汤从 span 中刮取文本值
- c# - c# linq union set 对不同存储类型的操作目前不支持 entityFrameworkCore
- wordpress - 复杂的交付矩阵成本计算
- xml - 将 XML 文件导入 SAP BW
- python - 如何使用 Python 清理带有两个分隔符的数据?
- node.js - Digital Ocean 空间使用 AWS s3 nodejs SDK 更新 ACL
- kubernetes-pod - Knative 服务 API 令牌存储