【问题标题】:How to read unsigned char delimited by white space in c如何在c中读取由空格分隔的无符号字符
【发布时间】:2014-09-24 00:53:17
【问题描述】:

到目前为止,当我尝试使用我的输入加载一个无符号字符数组时,每个输入字符都被视为一个字符。如何让程序知道我正在输入无符号字符?

输入:86 75 178 98 75 15 78 88

 unsigned char input[256];
 fgets(input,sizeof(input),stdin);
 for(int i=0; input[i] != '\n'; i++){
   printf("%hhu ", (unsigned char) input[i]);
 }

现在的输出是“8 6 7 5 1 7 8 9 8....”

我想用输入中提供的数字加载input 数组。

编辑:使用空格作为分隔符来显示第一个无符号字符的结尾会更容易吗?

【问题讨论】:

  • 您可以使用strtol()sscanf()和朋友从字符串中解析多位数字。
  • 您可以使用格式化输入函数,例如scanfsscanf,或者您可以编写一些代码来解析输入并执行字符串到整数的转换。

标签: c input unsigned-char


【解决方案1】:

读取后解析缓冲区。 "%n" 让您知道扫描的范围。

unsigned char input[256];
if (fgets(input,sizeof(input),stdin) == NULL) {
  HandleEOForIOError();
}

int n;
char *p = input;
unsigned char value;
while (sscanf(p, " %hhu %n", &value, &n) == 1) {
  printf("%hhu ", value);
  p += n;
}
if (*p != '\0') Handle_LeftOverGarbageInString();

【讨论】:

  • 注意:"%hhu %n"" %hhu %n" 具有相同的效果。 "%hhu" 之前不需要前导空格,但if (*p != '\0') ... 需要" %n" 中的前导空格。
猜你喜欢
  • 1970-01-01
  • 2021-02-17
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多