在循环之前扫描完int之后,我尝试将字符扫描到2D数组中。但我似乎无法扫描任何字符。为什么会发生这种情况?
#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
语句的条件为true,并且退出循环而不将任何字符保存到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
的值以及循环的范围。
这可能对您有用。
scanf(" %c", &nucleotide);