为什么我的代码没有返回任何内容?

时间:2014-04-21 13:47:32

标签: c file-io

假设对于诸如以下的条目:

1 1 524 5 true -1

其中第一个参数是idOrder,第二个参数是idOrder中的产品数量,第三个参数是代码,第四个参数是产品数量,第五个参数是用于区分产品和第六个参数的布尔值是最终标记。

它应该返回一个输出,如:

524 -1 5

其中第一个参数是产品的代码,第二个参数是最终标记,第三个参数是产品数量。

这是我的代码:

#include <stdio.h>

typedef enum {false, true} bool;

int main()
{
    const int END = -1;

    int idOrder, numProducts, idCodeProduct, amount, total, temp;
    bool generic, endSeq;

    scanf("%d", temp);
    /*printf("%d ", temp);*/
    idOrder = temp;
    endSeq = temp == END;

    if (endSeq != true) {
        total = 0;
        scanf("%d", &temp);
        numProducts = temp;
        scanf("%d", &temp);
        idCodeProduct = temp;
        scanf("%d", &temp);
        amount = temp;
        scanf("%d", &temp);
        generic = temp;

        if (generic == true) {
            total = total + amount;
            printf("%d", idCodeProduct);
        }
    }
    printf("%d ", END);
    printf("%d ", total);
    return 0;
}

当我运行此代码时,它根本不会返回任何内容,我不知道为什么。

3 个答案:

答案 0 :(得分:2)

问题是您在格式代码中有一个尾随空格scanf。虽然这会导致scanf读取并丢弃空格,但它也会导致scanf 读取,直到找到非空格。如果没有其他内容可供阅读,那么scanf将无限期地等待更多输入。

以格式删除尾随空格,它应该更好。只要您正在扫描普通字符串或数字,就必须记住scanf实际上会自动跳过前导空格。

我建议你阅读,例如this scanf reference

答案 1 :(得分:1)

1)删除@Joachim Pileborg建议格式的尾随空格。

2)按照@Anonymous

的建议,将temp更改为&temp

3)不要试图将“{”作为int读作@BLUEPIXY的评论。读为字符串并转换。

4)不需要temp @Joachim Pileborg

5)始终检查scanf()结果。

6)初始化总数

7)避免使用自己的typedef enum {false, true} bool;,使用stdbool.h

8)简化

int main() {

  const int END = -1;
  char tf[6];
  int idOrder, numProducts, idCodeProduct, amount;
  int total = 0;
  bool generic, endSeq;

  for (;;) {
    if (scanf("%d", &idOrder) != 1)
      Handle_BadInput();
    endSeq = idOrder == END;
    if (endSeq)
      break;
    if (scanf("%d%d%d%5s", &numProducts, &idCodeProduct, &amount, tf) != 4)
      Handle_BadInput();
    if (strcmp(tf, "true") == 0)
      generic = true;
    else if (strcmp(tf, "false") == 0)
      generic = false;
    else
      Handle_BadInput();
    if (generic) {
      total = total + amount;
      printf("%d ", idCodeProduct);  // add space
    }
  }
  printf("%d ", END);
  printf("%d ", total);
  return 0;

}

答案 2 :(得分:0)

scanf接受指针。 scanf("%d", &temp);