【发布时间】:2020-01-15 01:28:09
【问题描述】:
我最近一直在尝试用 c 做一个练习。
我想读取类似于“SET 0”的输入(请注意,稍后会解析实际文本)。
我试过 fgets 是这样的:
char in[20];
//ok, this reads the first line, the first input is meant to be a number
scanf("%s",in);
if(isdigit(in[0])){
char array[]={'?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?'};
auto counter = atoi(in);
while(counter !=0){
fgets(in, sizeof(in),stdin);
由于某种原因,当我输入例如“SET 0”并且我正在使用 fgets 时,in 变量为空(不会打印任何内容)。
我试过 scanf 但它不会读取数字。
关于我能做什么的任何想法/建议?
提前致谢!
【问题讨论】:
-
auto counter = atoi(in);它在这里的工作方式很有趣,但我相信auto并不意味着你认为它的作用。what i can do?你想做什么?结果应该是什么?我不明白,你究竟尝试了什么?使用fgets后如何检查in变量是否为空?您是如何使用fgets的?你检查fgets返回值了吗? -
如果输入是'SET 0',那么scanf会将
in设置为字符串“SET”。所以isdigit(in[0])是假的。 -
Konstantinosm 你在用C++ compiler吗?
-
永远不要
scanf("%s", ...)。它是不安全的,并且可能不会像您期望的那样做。