我应该做这个练习:用C编写一个程序,在屏幕上打印一个频率图表。 输入和输出:程序将三元组序列(数字,频率,字符)作为输入。对于每个序列,应打印一个斜杠,如下图所示生成图形。
示例输入
(5,12, -) (4,17, -) (2,1, -) (1,19, +)
程序应打印
5 | ------------ 12
4 | ----------------- 17
2 | -
1 | +++++++++++++++++++ 19
我意识到,如果我在scanf函数中的句子之前放置一个空格,它会很好地工作,但是该程序并不会在期望的时候结束
int main()
{
int x, b, i, u;
char n;
do{
u = scanf(" (%d,%d,%c)", &x, &b, &n);
printf("%d |", x);
for (i = 0; i < b; i++){
printf("%c", n);
}
printf(" %d\n", b);
}while(u == 3);
}
可以预期的是,当scanf不能读取它应该读取的3件事时,while循环结束,程序结束。但是,当发生这种情况时,他仍在等待新的输入。我该如何解决?
答案 0 :(得分:1)
只需检查u的返回值,然后使用if条件。该shold停止while循环并退出程序
int main()
{
int x, b, i, u;
char n;
do{
u = scanf(" (%d,%d,%c)", &x, &b, &n);
if(u == 3){
printf("%d |", x);
for (i = 0; i < b; i++){
printf("%c", n);
}
printf(" %d\n", b);
}
}while(u == 3);