假设对于诸如以下的条目:
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;
}
当我运行此代码时,它根本不会返回任何内容,我不知道为什么。
答案 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);