c-为什么我不能扫描字符

  • 本文关键字:不能 扫描 字符 c scanf
  • 更新时间 :
  • 英文 :


在循环之前扫描完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);

最新更新