scanf自动添加一个新行字符到我的字符串[复制]

fiei3ece  于 2023-03-07  发布在  其他
关注(0)|答案(1)|浏览(119)
    • 此问题在此处已有答案**:

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]);   
}

我尝试同时使用printfputs函数,但它仍然打印一个新行。
我希望有一种方法可以在字符串的开头不使用换行符来获取输入,或者在开头不使用换行符来打印字符串。

xzv2uavs

xzv2uavs1#

在格式字符串中添加前导空格,例如

scanf(" %[^:]:%d:%d:%d",arr,&m1,&m2,&m3);
      ^^^

它允许跳过空白字符,包括在先前调用scanf之后存储在输入缓冲区中的新行字符'\n'
来自C 23标准(7.23.6.2 fscanf函数)
5由空白字符组成的指令通过读取输入直到第一个非空白字符(保持未读)或直到不能读取更多字符来执行。该指令从不失败。
这是一个演示程序。

#include <stdio.h>

int main( void )
{
    enum { N = 10 };
    char s[N];

    printf( "Enter a string (no more than %d symbols): ", N - 1 );
    scanf( "%9[^\n]", s );

    printf( "s = \"%s\"\n", s );

    printf( "ENter a string (no more than %d symbols): ", N - 1 );
    scanf( " %9[^\n]", s );

    printf( "s = \"%s\"\n", s );
}

程序输出可能如下所示

Enter a string (no more than 9 symbols):      A
s = "     A"
Enter a string (no more than 9 symbols):      B
s = "B"

相关问题