我有一个小程序,我想要一个选项,然后是一个文件名。
Gang of Four
问题是我的fgets被跳过了,即使在gdb中,gdb在 //Some code before
printf("######################\n");
printf("# 1. Register a file #\n");
printf("# 2. Get global list #\n");
printf("# 3. Download a file #\n");
printf("# 4. Quit / Exit #\n");
printf("######################\n");
printf("Enter decision: ");
fflush(stdin);
action = getchar();
action -= '0';
sprintf(input, "[%d]--", action);
switch (action)
{
case 1:
printf("Enter file name: ");
fflush(stdin);
fgets(input+strlen(input), LINE_LEN, stdin);
input[strlen(input)] = (input[strlen(input)] == '\n') ? 0 : input[strlen(input)];
if(write(sock, input, sizeof(input)) == -1) perror("Clienthandler Write 3");
break;
//some code after
之后显示fgets
inspect input
时"\n\000]--"
这是控制台输出:
action = 1
答案 0 :(得分:3)
public class ApplicationsController : Controller
{
private readonly IApplicationService _applicationService;
public ApplicationsController(IApplicationService applicationService)
{
_applicationService = applicationService;
}
[HttpGet]
public async Task<IActionResult> Index(ApplicationQuery query)
{
var permissionNodes = await _applicationService.SelectePagedApplicationsAsync(query);
ViewData["Query"] = query;
return View(permissionNodes.Data);
}
[HttpPost("/Applications")]
public async Task<IActionResult> Create(ApplicationViewModel model)
{
var app = Mapper.Map<Application>(model);
var result = await _applicationService.CreateApplicationAsync(app);
ViewData["ServiceResult"] = result;
return View(nameof(Edit));
}
[HttpPut("/Applications")]
public async Task<IActionResult> Update(ApplicationViewModel model)
{
var app = Mapper.Map<Application>(model);
var result = await _applicationService.CreateApplicationAsync(app);
ViewData["ServiceResult"] = result;
return View(nameof(Edit));
}
[HttpGet]
public async Task<IActionResult> Edit(long? id)
{
var result = await _applicationService.FindApplicationAsync(new ApplicationQuery
{
Id = id
});
var model = Mapper.Map<ApplicationViewModel>(result.Data);
return View(model);
}
未被跳过,但使用fget()
从上一个输入中读取左侧的新行。
所有关于完整的错误检查和理智的日志记录:
getchar()