Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在c中读取一个c字符串和一个带有单个scanf的int?_C_Scanf - Fatal编程技术网

有没有一种方法可以在c中读取一个c字符串和一个带有单个scanf的int?

有没有一种方法可以在c中读取一个c字符串和一个带有单个scanf的int?,c,scanf,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字符串,然

哎,, 我试图通过这个函数获得以下输出和列出的输入,“…”就是我不确定要写什么的地方:

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,这可能吗

编辑: 我只能在带有三个句点(“…”)的位置编辑代码,我不能再使用其他任何东西了。我可以假设所列出的输入是预期的,但在这三个期间之外,我无法更改任何内容。
输出不包含打字错误,此任务的目的是使用标志和转义序列。

我将通过quick:

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

  • 中的
    100
    %100[…
    应该是您的实际缓冲区大小,以防止缓冲区溢出
  • %3d
    记录的数字值最多应包含3位数字,因此1000正确读取为100
  • [^…]
    表示由以下集合中不为(“^”)的字符组成的字符串,然后指定为
    0-9
    -数字
  • if(…==2)
    测试两个位置参数是否已成功扫描/转换
如果无法添加
If
和错误消息,则只需:

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

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

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

在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
#包括
int main()
{
char语句[100];
int等级=0;
scanf(“%[^0-9]%d”,句子和等级);
printf(“%s%d”,句子,等级);
返回1;
}
输入:
我的CS成绩是100
输出:
我的CS成绩是100

这是一个非常可怕的问题。正确的扫描参数集应该是
“%14c%3d”、句子和等级

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


我想不出任何理由来编写这样的代码。代码符合要求,但在任何其他情况下都不会有用。我认为这是一个非常糟糕的培训练习。

除了问题中的确切代码行之外,我不能使用任何东西。我必须通过一次扫描获得必要的输出。@Aux-The
scanf()
部分就是您需要的。周围的
if(…)
语句是一个安全检查-
scanf
返回它成功分配数据的参数数(在本例中,如果用户以正确的格式输入数据,则返回2个参数)而
if
语句只是验证了这一点。如果你的老师想让你写错误的代码,就不需要它了。:PHow可能是这样吗?你问题中的代码使用“%s%d”“
%s
在第一个空格处停止扫描。它不能用于您的输入。我上面的代码有一个
scanf
-只是格式和参数不同。@Chris:好的一点-可能是
if
混淆了Aux…谢谢。
scanf()
*
表示“禁止赋值”,这不是您想要的。您不能在格式字符串中使用可变长度;您必须使用实际长度写入字符串:
“%.30[^0-9]%d”
。是的,
scanf()
很奇怪。这和我一开始做的完全一样,但它不起作用。你确定它不起作用吗?我用我的GCC编译器尝试了这个方法,它似乎起作用了。我更喜欢@Tony的版本,如果他做对了,就进行边界检查。+1让我对
的语法进行双重检查“%[”
@Aux:这不起作用,它在
is
1000
之间输出两个空格,还输出
1000
,而不是
100
。请在答案底部逐字张贴作业。这一直在变化,我们一直在回答。首先你不能假设字符串是什么,然后你可以..这样更好如果我们理解老师在帮助做家庭作业时想要什么。你的输入/输出是否有输入错误,或者用户是否应该输入1000(千)分并获得100(百)分作为输出?不知道是否需要考虑负积分,接受的答案将不适用于负整数。@辅助:这不起作用,它输出介于
is
1000
之间的两个空格,还输出
1000
,而不是
100
#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