- 此问题在此处已有答案**:
scanf() leaves the newline character in the buffer(7个答案)
13天前关闭。
我试图解决一个基本的问题,我必须打印一个字符串,输出,我完成了我的代码,并提交它的测试用例,它打印正确的输出,但它包括一个换行符,在输出字符串的开头,由于这一点,测试用例失败。
- 输入**的形式为:
Arun:40:51:60
roger:49:51:62
steve:80:71:60
- 输出应为得分最高的学生姓名:* 史蒂夫
但是我的程序输出:"史蒂夫"
这是我的程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int val=0,topMark=0;
char topStudent[101];
scanf("%d",&val);
for(int i=0;i<val;i++)
{
char arr[101];
int m1,m2,m3;
scanf("%[^:]:%d:%d:%d",arr,&m1,&m2,&m3);
if(topMark<(m1+m2+m3))
{
topMark=m1+m2+m3;
strcpy(topStudent,arr);
}
}
puts(topStudent[i]);
}
我尝试同时使用printf和puts函数,但它仍然打印一个新行。
我希望有一种方法可以在字符串的开头不使用换行符来获取输入,或者在开头不使用换行符来打印字符串。
1条答案
按热度按时间xzv2uavs1#
在格式字符串中添加前导空格,例如
它允许跳过空白字符,包括在先前调用
scanf
之后存储在输入缓冲区中的新行字符'\n'
。来自C 23标准(7.23.6.2 fscanf函数)
5由空白字符组成的指令通过读取输入直到第一个非空白字符(保持未读)或直到不能读取更多字符来执行。该指令从不失败。
这是一个演示程序。
程序输出可能如下所示