4

为类编写程序,仅限于 scanf 方法。程序接收可以接收任意数量的行作为输入。使用 scanf 接收多行输入时出现问题。

#include <stdio.h>
int main(){
    char s[100];
    while(scanf("%[^\n]",s)==1){
        printf("%s",s);
    }
    return 0;
}

示例输入:

Here is a line.
Here is another line.

这是当前的输出:

Here is a line.

我希望我的输出与我的输入相同。使用scanf。

4

4 回答 4

9

我认为你想要的是这样的(如果你真的仅限于 scanf):

#include <stdio.h>
int main(){
    char s[100];
    while(scanf("%[^\n]%*c",s)==1){
        printf("%s\n",s);
    }
    return 0;
}

%*c 基本上会抑制输入的最后一个字符。

man scanf

An optional '*' assignment-suppression character: 
scanf() reads input as directed by the conversion specification, 
but discards the input.  No corresponding pointer argument is 
required, and this specification is not included in the count of  
successful assignments returned by scanf().

[编辑:根据克里斯·多德的抨击删除误导性答案:)]

于 2013-01-24T05:16:45.083 回答
6

试试这个代码并使用tab键作为分隔符

#include <stdio.h>
int main(){
    char s[100];
    scanf("%[^\t]",s);
    printf("%s",s);

    return 0;
}
于 2013-01-24T06:56:54.950 回答
1

我给你一个提示。

您需要重复 scanf 操作,直到达到“EOF”条件。

通常的做法是使用

while (!feof(stdin)) {
}

构造。

于 2013-01-24T05:12:27.933 回答
0

试试这段代码。它可以在具有 C99 标准的 GCC 编译器上正常工作。

#include<stdio.h>
int main()
{
int s[100];
printf("Enter multiple line strings\n");
scanf("%[^\r]s",s);
printf("Enterd String is\n");
printf("%s\n",s);
return 0;
}
于 2017-03-06T11:41:22.157 回答