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