c - 为什么我无法扫描字符?
问题描述
在循环之前扫描完 int 后,我尝试将字符扫描到二维数组中。但似乎我无法扫描任何字符。为什么会这样?
#include <stdio.h>
int main() {
int S_m, S_t, S_v, S_d;
char dp[500][500];
char nucleotide;
int i, m;
scanf("%d %d %d %d", &S_m, &S_t, &S_v, &S_d);
for (i = 0; i < 500; i++){
scanf("%c", &nucleotide);
if (nucleotide == '\n'){
m = i + 1;
break;
}
dp[i+1][0] = nucleotide;
}
for (i = 0; i <= m; i++){
printf("%c", dp[i+1][0]);
}
return 0;
}
解决方案
我的猜测是您在输入 4 个数字后输入换行符。
换行符不被消耗
scanf("%d %d %d %d", &S_m, &S_t, &S_v, &S_d);
并被消耗
scanf("%c", &nucleotide);
这使得执行if
语句的条件为真并退出循环而不将任何字符保存到dp
.
为避免此类问题,您可以使用fgets()
读取包含换行符的行并通过sscanf()
.
char buffer[1024];
fgets(buffer, sizeof(buffer), stdin);
sscanf(buffer, "%d %d %d %d", &S_m, &S_t, &S_v, &S_d);
还要注意循环
for (i=0; i<=m; i++){
printf("%c", dp[i+1][0]);
}
将打印 2 NUL。您可能需要重新考虑要设置的值m
和循环的范围。
推荐阅读
- android - 当应用程序应使用 TLS 时,在 SSLv3 握手期间引发 SSLProtocolException(Android 上的 OkHttp 3)
- firebase - 自定义用户模型到 Firebase 身份验证
- google-apps-script - 编辑特定单元格时将 CSV 文件从 Google Drive 导入 G Sheets 的 Google Script
- r - 如何从 R 中的字符串中删除这些元素
- python - 如何在类中组合相同的变量
- regex - 匹配多行文本(从 1 到 n 行)直到某个新行正则表达式
- python - 基于标签下载所有 NCBI PubMed ID
- html - 单击更新按钮后图像未编辑
- oracle - 什么是 PLS 整数?
- vim - 如何更改 .txt 文件中字体的颜色?