有没有办法在C中读取一个c-string然后一个带有单个scanf的int?

时间:2011-01-31 07:01:50

标签: c scanf

嘿 我正在尝试使用列出的输入获取此函数以获得以下输出,“...”是我不确定要写的内容:

void Question8(void)
{
  char sentence[100];    
  int grade;    
  scanf(….);    
  printf("%s %d", sentence, grade);    
}

Input:
My CS Grade is 1000

Output:
My CS Grade is 100

然而,踢球者是我需要scanf读取一个c字符串,然后使用单个scanf命令读取一个int,这是否可能?

修改: 我只能编辑具有三个句点(“...”)的位置中的代码,我不能再使用任何东西了。我可以假设列出的输入是预期的,但我不能改变三个时期之外的任何东西。 输出不包含拼写错误,此赋值的目的是使用标志和转义序列。

4 个答案:

答案 0 :(得分:2)

我会快速解决这个问题:

<obligatory_rant>
    stupid question, but I guess it's homework and you're
    stuck with these absurd limitations
</obligatory_rant>

然后,如果你需要读取所有内容但不包括第一个数字,那么数字为:

if (scanf("%100[^0-9] %3d", text, &number) == 2)
    ...

注意:

    100中的
  • "%100[...应该是您的实际缓冲区大小,以防止缓冲区溢出。
  • 最多3位数的%3d个文档应该参与数值,因此1000被正确读取为100。
  • [^...]表示由以下字符集中的字符组成的字符串(“^”),然后将其指定为0-9 - 数字。
  • if (... == 2)测试是否成功扫描/转换了两个位置参数。

如果您无法添加if和错误消息,那么只需:

scanf("%100[^0-9] %3d", text, &number)

答案 1 :(得分:2)

可以使用scanf读取预格式化的字符串,但格式必须严格。 此版本将继续读取输入,直到遇到数字然后读取整数。 这是你的代码:

  char sentence[100];
  int grade;
  scanf("%[^0-9] %d",sentence,&grade);
  printf("%s %d\n", sentence, grade);

答案 2 :(得分:1)

Visual Studio 2008

中测试
#include <stdio.h>

    int main()
    {
      char sentence[100];    
      int grade = 0;    
      scanf("%[^0-9] %d",sentence,&grade);
      printf("%s %d", sentence, grade);   
      return 1;
    }


Input : 
My CS Grade is 100
Output :
My CS Grade is 100

答案 3 :(得分:0)

这是一个非常可怕的问题。一组正确的scanf参数为"%14c%3d", sentence, &grade

因为printf语句中包含空格,所以尾随空格不需要存储在句子中。因为输入包含其他空格,所以没有其他解决方案(我可以解决)而不是固定长度。整数解析还需要固定长度才能将1000截断为100

我认为没有理由写这样的代码。代码符合要求,但在任何其他情况下都没有用。我认为这是一项非常糟糕的训练。