我希望scanf读取一些数据并将其存储到多个变量中。但是,如果第一个变量,即数量为0,则scanf需要退出请求用户输入,因为我的后续while循环取决于该值,即数量。如果该值不为零,则继续循环并执行进一步的操作,否则不执行。
#include <stdio.h>
struct inventory {
int quantity, category;
double price, soldByWeight;
char name[20];
};
void main(void) {
struct inventory arr[5] = { 0 };
printf("Enter values: \n");
for (int i = 0; i < 5; i++) {
scanf("%d%*c%d%*c%lf%*c%lf%*c%19[^\n]", &arr[i].quantity, &arr[i].category, &arr[i].price, &arr[i].soldByWeight, arr[i].name);
/*while (arr[i].quantity != 0) {
do some stuff
}*/
}
return 0;
}
样品输入1: 21,1,1.5,1,马铃薯
样本输入2:0
此处,在示例输入2之后,如果输入0并按enter键,scanf仍在等待用户的输入。在输入0和enter键后,如何退出scanf函数。%*c用于刷新示例输入中使用的逗号。
您可以使用fgets
读取整行内容。如果该行仅包含0,则中断for循环。否则,使用sscanf
解析字段。
#include <stdio.h>
struct inventory {
int quantity, category;
double price, soldByWeight;
char name[20];
};
int main() {
struct inventory arr[5] = { 0 };
char buf[2048];
printf("Enter values: \n");
for (int i = 0; i < 5; i++) {
fgets(buf, sizeof(buf), stdin);
if ((buf[0] == '0') && ((buf[1] == '\n') || ((buf[1] == '\r') && (buf[2] == '\n')))) {
break;
}
sscanf(buf, "%d,%d,%lf,%lf,%19[^\n]", &arr[i].quantity, &arr[i].category, &arr[i].price, &arr[i].soldByWeight, arr[i].name);
printf("%d %d %lf %lf %s\n", arr[i].quantity, arr[i].category, arr[i].price, arr[i].soldByWeight, arr[i].name);
}
return 0;
}
首先,我建议您将整行输入读入字符串。
然后使用sscanf
解析字符串,并始终检查它返回的内容。
最后,如果sscanf
返回1
,则选中arr[i]。数量
查看其值是否为零。
作为一种替代方法,您也可以使用例如strtol
预先检查输入0
(在调用sscanf
之前)。
如果输入了非int值,如何创建一个会中断的while循环? 例如,如果用户输入字符串、double或int以外的其他基本类型,循环将退出。
我试图清除一个输入的值取决于它是否找到一个id如果它找到一个现有的id js更新的值的输入但如果它不保持最后一个找到但我需要有明确的值,有人能告诉我怎么了吗:
您好,我有一个值为0-380的输入范围,我想禁用一些值,比如ID 30。因此,当我选择29并按下右箭头时,它必须更改为31。
我有一个输入,当按“回车键”调用一个函数来重新加载列出的项目时,我需要。为此,我正在使用 当在loadItems调用中使用常量值时,这种方法效果很好,但只要我想传递输入值,就会出现一个错误: 这就是我得到的
我正在开发一个程序,它会要求用户输入一个整数,然后输入另一个,并将它们作为图点。然后它会告诉他们之间的距离。用户必须输入一个整数或按“Q”退出。如果它是其他任何东西(不是整数或字母“Q”),它会告诉他们那是不正确的,请再试一次。我以为这就是我可以实现的方法,但它返回错误。非常感谢您的帮助! 如果我没有注释掉最后一个else语句,它就会默认为该语句,并且永远循环我的错误消息。
代码: 我已经翻遍了方法,没有找到,这并不意味着;然而,它不在那里。 任何帮助都很感激。谢了!