1

から最後の 3 つだけを取得したいstdin

使用する

scanf("%3d")

最初の 3 つを取得できますが、最後の 3 つが必要で、それより前のすべてを無視します。

サンプル入力

bkjashfsjak32326321536999999999999999999999999999999999999999999

どうやってやるの?

stdin可能であれば、内容を無視して、バッファに 3 文字だけを取得したいと思います。

4

2 に答える 2

4

整数を読み取っているようです。もしそうなら(あなたは他のすべてを無視しているので)、全体を読んで1000で割った余りを取ることができます.

    scanf ("%d", &read_int);
    last_3 = read_int % 1000;

更新: 整数ではないため(some_large_buf最大の文字列を取ることができると仮定):

    scanf ("%s", some_large_buf);
    last_3 = atoi (some_large_buf + strlen(some_large_buf) - 3);

更新 2: このバージョンはバッファーを使用せず、最下位 3 桁のローリング値を維持します。

    unsigned int sum = 0;
    char c;
    while (1) {
        scanf ("%c", &c);

        if (c == 0 || c == '\n') break;

        if (c >= '0' && c <= '9') {
            sum *= 10; 
            sum += c - '0';
            sum %= 1000;
        }   
        else {
            sum = 0;
        }   
    }   
    printf ("%d", sum);
于 2012-12-20T00:16:49.670 に答える
2

1 つの可能性はfgets( ... stdin)、それをバッファに読み込むために使用することです。次に、バッファの末尾から目的の情報を抽出できます (たとえば、sscanf目的の開始位置へのポインタを使用して渡します)。一般的な考え方は次のようになります。fgets返されたバッファに改行文字が返される可能性があることに注意してください。そのため、改行文字がわかっている場合は、それを考慮する必要があります。

char buf[1024];
char *pos;
size_t len;
int val = 0;

fgets( buf, sizeof( buf ), stdin );
len = strlen( buf );

if ( len < 3 )
  printf( "Not long enough\n" );
else
  sscanf( buf + len - 3, "%d", &val );
于 2012-12-20T00:18:37.910 に答える