【问题标题】:Fgets isn't getting any input from stdin or stdin isn't being equaled to the input?Fgets 没有从标准输入获得任何输入,或者标准输入不等于输入?
【发布时间】:2013-07-22 21:21:24
【问题描述】:

示例代码:

    char cnumb1[2];
    NSLog(@"Do you have an account already?(1 for Yes, 0 for no)");
    int c;
    //Flushes input
    while((c = getchar()) != '\n' && c != EOF);
    fgets(cnumb1, sizeof cnumb1, stdin);
    size_t length = strlen(cnumb1);
    if (cnumb1 [length-1] == '\n'){ // In case that the input string has 1 character plus '\n'
        cnumb1 [length-1] = '\0';} // Plus '\0', the '\n' isn't added and the if condition is false.
    NSString* string = [NSString stringWithUTF8String: cnumb1];
    NSLog(@"string:%@", string);

输入“0”(编辑:出于某种原因,我需要按两次回车键),我得到输出“字符串:” 据我所知,标准输入的设置不正确。 另外,我开始时没有刷新线,但这导致了很多问题,因为我以后有更多的 fget,而且标准输入只是初始输入,所以我添加了这些。

为什么输入没有设置为标准输入? 还是完全是另一个问题?

【问题讨论】:

  • char cnumb1[2]; fgets(cnumb1, 3, stdin); - ???
  • 哦,这是示例代码中的错误,对不起!我会改变它。它通常不像代码中那样。对不起!
  • 如果您接受一些建议:使用sizeof cnumb1 而不是硬编码的尺寸。
  • 喜欢 fgets(cnumb1, sizeof cnumb1, stdin); -?
  • 是的,就是这样。

标签: objective-c console-application fgets


【解决方案1】:

线

while((c = get char()) != '\n' && c != EOF);

需要直接在 fgets 之后,而不是之前。

另外,虽然不直接回答问题,但最好这样做

fgets(cnumb1, sizeof cnumb1, stdin);

然后在 cnumb1 的 sizeof 中进行硬编码,正如 @H2CO3 向我指出的那样。

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2017-03-04
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多