嘿 我正在尝试使用列出的输入获取此函数以获得以下输出,“...”是我不确定要写的内容:
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,这是否可能?
修改: 我只能编辑具有三个句点(“...”)的位置中的代码,我不能再使用任何东西了。我可以假设列出的输入是预期的,但我不能改变三个时期之外的任何东西。 输出不包含拼写错误,此赋值的目的是使用标志和转义序列。
答案 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[...
应该是您的实际缓冲区大小,以防止缓冲区溢出。%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
。
我认为没有理由写这样的代码。代码符合要求,但在任何其他情况下都没有用。我认为这是一项非常糟糕的训练。