首页 > 解决方案 > 为什么我无法扫描字符?

问题描述

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

标签: cscanf

解决方案


我的猜测是您在输入 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和循环的范围。


推荐阅读