用C语言中的scanf写一封信

用C语言中的scanf写一封信,c,scanf,C,Scanf,我得到了这个练习: 想象一下,有人想写信。每个句子都是使用单个scanf命令执行输入的。每个句子都存储在一个字符数组中 最佳长度。如果用户输入的行仅由短划线(-)组成,则文本为 假定已完成。输入所有文本后,将其打印到 控制台 我不太明白它的意思,但我决定尝试用scanf写一封电子邮件 #include <stdio.h> int main() { char name1[100]; char mail1[9999];

我得到了这个练习:

想象一下,有人想写信。每个句子都是使用单个scanf命令执行输入的。每个句子都存储在一个字符数组中 最佳长度。如果用户输入的行仅由短划线(-)组成,则文本为 假定已完成。输入所有文本后,将其打印到 控制台

我不太明白它的意思,但我决定尝试用scanf写一封电子邮件

#include <stdio.h>         
int main()        
{          

char name1[100];       
char mail1[9999];     
char name2[100];        
printf("Dear ");      
scanf("%s", name1);     
scanf("%s", mail1);      
printf("Sincerely,");         
scanf("%s", name2);       


return 0;      
}
#包括
int main()
{          
字符名称1[100];
char-mail1[9999];
字符名称2[100];
printf(“亲爱的”);
scanf(“%s”,名称1);
scanf(“%s”,mail1);
printf(“真诚地,”);
scanf(“%s”,名称2);
返回0;
}

这就是我能写的。在我在打印“亲爱的”后写下某人的名字后,我只写了信的正文,但如果我写了一个以上的单词,就不允许我在“真诚”之后写任何东西。您的程序应该执行以下操作:

while (1)
{
    scnaf into a fixed length buffer;
    if the buffer equals to "-"
        break the loop;
    duplicate the buffer;
    add the duplicate to any structure (like a linked list);
}

run over the list and print all the lines.
关于
scanf
,简单调用将不起作用,因为它只读取aword。使用
fgets
或更宽松的扫描格式说明符。我在谷歌上找到了这个选项:

scanf("%[^\n]", str);

您的第三个
scanf
已跳过,因为您在第二个
scanf
中添加了空格。要避免这种情况,请使用
get()
方法而不是
scanf()

两个代码的输出-:

Dear Son                                                                                                            
I love you                                                                                                          
Sincerely, Your Mom

%s
格式说明符读取空格分隔的单词。您应该使用
fgets
。请不要通过破坏您的帖子为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果你想了解更多关于删除帖子的信息,请参阅:哦,谢谢,我尝试过使用fgets,但它完全跳过了,顺便问一下,我能对破折号做些什么吗?什么破折号?你能进一步解释吗?所以输入破折号(-)应该是句子的结尾,根据我想的练习,一个句子应该是一个scanf。是的。如果你想写类似的段落,你可以使用另外几个字符数组。你能解释一下破折号是如何结束一个句子的吗?我尝试使用if语句和循环,但没有正确地使用它
#include <stdio.h>

int main()
{
    char name1[100];       
    char mail1[9999];     
    char name2[100]; 

    printf("Dear ");

    scanf("%[^\n]%*c", name1);
    scanf("%[^\n]%*c", mail1);

    printf("Sincerely, "); 

    scanf("%[^\n]%*c", name2);

    return 0;   
}
Dear Son                                                                                                            
I love you                                                                                                          
Sincerely, Your Mom