该程序应获取用户的名字和姓氏,然后将其打印为姓氏和名字。程序在第二次输入后立即停止。我尝试了fflush(stdout),但似乎没有用(我可能做错了)。
<div class="container col-lg-3">
<div class="col-md-12">
<h1 class="text-center">Lorem Ipsum<hr/></h1>
<div class="row">
<a class= "col-md-10 col-sm-3" href="Lorem Ipsum.html">
<img data-src="holder.js/200x200" class="img-fluid mx-auto d-block shadow" alt="200x200" src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Square_200x200.png" data-holder-rendered="true">
</a>
<a class= "col-md-10 col-sm-3" href="Lorem Ipsum.html">
<img data-src="holder.js/200x200" class="img-fluid mx-auto d-block shadow" alt="200x200" src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Square_200x200.png"data-holder-rendered="true">
</a>
<a class= "col-md-10 col-sm-3" href="Lorem Ipsum.html">
<img data-src="holder.js/200x200" class="img-fluid mx-auto d-block shadow" alt="200x200" src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Square_200x200.png"data-holder-rendered="true">
</a>
<a class= "col-md-10 col-sm-3" href="Lorem Ipsum.html">
<img data-src="holder.js/200x200" class="img-fluid mx-auto d-block shadow" alt="200x200" src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Square_200x200.png" data-holder-rendered="true">
</a>
</div>
</div>
</div>
答案 0 :(得分:1)
程序的C ++版本:
#include <iostream>
using namespace std;
int main()
{
string first, last;
cerr << "Please type in your First Name: ";
if (! (cin >> firs))
return -1;
cerr << "Please type in your Last Name: ";
if (! (cin >> last))
return -1;
cout << last << ' ' << first << endl;
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ g++ -pedantic -Wextra i.cc
pi@raspberrypi:/tmp $ ./a.out
Please type in your First Name: aze
Please type in your Last Name: qsd
qsd aze
pi@raspberrypi:/tmp $
我检查是否输入了姓名(没有EOF),我使用 cerr 来确保在不编写 endl
的情况下刷新消息和C版本:
#include <stdio.h>
int main()
{
char first[30], last[30];
fprintf(stderr, "Please type in your First Name: ");
if (scanf("%29s", first) != 1)
return -1;
fprintf(stderr, "Please type in your Last Name: ");
if (scanf("%29s", last) != 1)
return -1;
printf("%s %s\n", last, first);
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra i.c
pi@raspberrypi:/tmp $ ./a.out
Please type in your First Name: aze
Please type in your Last Name: qsd
qsd aze
我限制了 scanf 中的大小以不写出数组,我检查了 scanf 是否能够读取名称,我还使用了 stderr < / em>以确保刷新消息时不写'\ n'
first 和 last 是数组,在 scanf 中使用'&'给出地址
是没有用的请注意,这些版本不允许使用空格输入组成名称,以允许需要读取所有行
答案 1 :(得分:0)
这有助于考虑fflush()调用的目的。您希望用户看到待处理的数据,以便他们知道要键入什么。
让我们考虑第一个查询(printf,scanf,flush)。 printf()将数据放入缓冲区。然后scanf()读取用户的响应。直到用户键入内容后,flush()才会执行。
这三个呼叫顺序错误。我将修复它留给读者练习。
现在考虑下一个查询(printf,scanf)。 printf()将数据放入缓冲区。 scanf()读取用户的响应,但用户尚未看到“ ... Last Name:”提示。
很显然,该区块中也存在错误。再次,我将修复该问题作为读者的练习。提示:如果您解决了第一个错误,应该可以帮助您理解第二个错误。
顺便说一下,scanf()不能防止First []和Last []数组溢出。不必回答您的原始问题,但是我提到了它,因为即使在您修复了代码之后,它仍然是不安全的。
答案 2 :(得分:0)
您拥有的export const clearReducersState = (history) => dispatch => {
history.push('/dashboard')
}
并没有帮助,因为它在代码中为时过早,因为它无助于刷新后面的printfs。
您也可以使用fflush(stdout);
进行刷新。但是,如果您的输出设备不是交互式的(例如,重定向到文件。
\n
格式说明符还存在另一个问题:scanf()
和First
是数组,在传递给scanf时会衰减为指针。因此,您将错误的 type 参数传递给scanf-只需从scanf调用中删除Last
即可。
所以您的程序可以简单地是:
&
如果您可以在所有printf调用中使用#include <stdio.h>
int main(void)
{
char First[30], Last[30];
printf("Please type in your First Name: ");
scanf("%s", First);
fflush(stdout);
printf("Please type in your Last Name: ");
scanf("%s", Last);
fflush(stdout);
printf("%s %s\n", Last, First);
fflush(stdout);
getchar();
return 0;
}
,则可能不需要所有fflush(stdout)
调用,因为您很可能使用的是交互式终端。
如果您使用的是C ++,则应该使用iostream进行I / O。如果没有其他要求,请scanf is a terrible, has many problems, and should be avoided。