【发布时间】:2016-03-04 21:48:46
【问题描述】:
我正在编写一个简单的代码,我需要输入一个数字 n,然后输入 n 个格式为“string int”的字符串(例如 hello 100)。我使用fgets() 函数来获取字符串输入。除第一个迭代外,该代码似乎对所有迭代都运行良好。第一次迭代似乎有一个空的 cmd 输入,但其余的迭代运行良好。我尝试了各种功能,如scanf() 和gets(),但问题仍然存在。谁能指出问题?
#include <stdio.h>
#include <stdlib.h>
int main() {
int num_msg, i;
printf("Hello, How many strings should I read?: ");
scanf("%d", &num_msg);
for (i = 0; i < num_msg; i++) {
int child;
char cmd[100], msg[100];
printf("Message %d (<msg> <int>):", i + 1);
if (fgets(cmd, sizeof(cmd), stdin)) {
//printf("cmd %s\n", cmd);
sscanf(cmd, "%s %d %*s", msg, &child); //separates string and int
printf("%s %d \n", msg, child); //prints them
}
}
}
【问题讨论】:
-
你能用 scanf("%d\n"... 删除它吗?
-
请参阅stackoverflow.com/a/34498302/434551 以获取忽略该行其余部分的功能。
-
@ArifBurhan 我这样做了,它现在接受输入,但输入是在循环中的 print 语句之前接受的。
-
@ArifBurhan,使用
"%d\n"或"%d "不仅会消耗换行符,还会消耗下一行中的任何空白字符。太贪心了。 -
@ArifBurhan,你是说
fgets()吗?如果没有,你应该改变你的编码习惯。