3
#include<stdio.h>
#include<string.h>

int main()
{
   char buffer[32];
   char c;
   int i;
   printf("input: ");
   fgets(buffer, 32, stdin);
   printf("items filled: %d\n", sscanf("%c%d\n", &c, &i));
   printf("%c%d\n", c, i);
   return 0;
}

文字の後に数字「f7」を入力すると、「f」が variablecに、「7」がvariable に入ることが期待されますi。何らかの理由で、sscanf()両方を埋めることができず、初期のガベージ値を取得しています。私は何を間違っていますか?

4

4 に答える 4

6

実際のsscanf()署名は次のとおりです。

int sscanf(const char *str, const char *format, ...);

sscanf()間違った署名を使用したことを示す署名を確認してください

そのはず

sscanf(buffer,"%c%d\n", &c, &i);
于 2012-11-26T17:17:53.653 に答える
3

使用しないでくださいsscanf。あなたがやろうとしている解析を行う正しい方法は

#include <stdlib.h>
#include <stdio.h>

// ...

char *endptr, buffer[32];
char c;
int i;

// ...

fgets(buffer, 32, stdin);
c = buffer[0];
i = strtol(buffer+1, &endptr, 10);

if (endptr == buffer+1 || (*endptr != '\0' && *endptr != '\n')) {
    puts("invalid input");
    return 1;
} else {
   printf("%c%d\n", c, i);
   return 0;
}
于 2012-11-26T17:20:20.747 に答える
3

呼び出しでバッファを使用しsscanf()ていないため、バッファがいっぱいになりません。

int i;
char c;
char buffer[32];
fgets(buffer, 32, stdin);
sscanf(buffer, "%c%d", &c, &i)
         ^
      you're missing this part
于 2012-11-26T17:18:57.383 に答える
1

sscanf("%c%d\n", &c, &i)c と i のバッファーを調べるように指示されることはありません。この呼び出しを間違って行っているようです。

于 2012-11-26T17:19:32.790 に答える