fgets正在被跳过

时间:2018-04-14 10:24:55

标签: c fgets getchar

我有一个小程序,我想要一个选项,然后是一个文件名。

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

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()