有没有一种方法可以在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
记录的数字值最多应包含3位数字,因此1000正确读取为100%3d
表示由以下集合中不为(“^”)的字符组成的字符串,然后指定为[^…]
-数字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