从用户获取多个整数作为输入 我知道C++,但是我正在尝试写我的第一个C程序,我希望能够从用户那里得到一行输入,并把它转换成10个不同的数字。例如,系统将提示用户输入一些数字,用户最多可输入10个数字:
最多可输入10个数字: >344121245435234 44 199 4735890 034001 154595从用户获取多个整数作为输入 我知道C++,但是我正在尝试写我的第一个C程序,我希望能够从用户那里得到一行输入,并把它转换成10个不同的数字。例如,系统将提示用户输入一些数字,用户最多可输入10个数字:,c,arrays,input,integer,C,Arrays,Input,Integer,最多可输入10个数字: >344121245435234 44 199 4735890 034001 154595 然后我想将它们存储在一个数组中,稍后再处理它们。我一直在寻找如何获取输入,但我发现的大部分内容都不清楚。任何帮助都将不胜感激,谢谢 关于一些C函数,您需要阅读一些内容: 阅读整行。 删除末尾的换行符 将行标记化 将每个字符串转换为整数 将它们存储在一个数组中 如果您不担心无效输入,可以使用读取C字符串。对于一些C函数,您需要进行一些读取: 阅读整行。 删除末尾的换行符 将行标记化
然后我想将它们存储在一个数组中,稍后再处理它们。我一直在寻找如何获取输入,但我发现的大部分内容都不清楚。任何帮助都将不胜感激,谢谢 关于一些C函数,您需要阅读一些内容:
如果您不担心无效输入,可以使用读取C字符串。对于一些C函数,您需要进行一些读取:
如果您不担心无效输入,您可以使用读取C字符串。您可以从用户输入中读取行,将其标记化,然后使用以下命令直接从标记中检索数字:
//数组大到可以容纳10个数字:
整数[10]={0};
//从用户输入中读取行:
字符输入字符串[200];
fgets(输入字符串,200,标准输入);
//将输入字符串拆分为标记:
char*token=strtok(inputString,“”);
//从每个令牌检索一个数字:
int i=0;
while(令牌!=NULL&&i<10){
如果(sscanf(令牌,“%d”&数字[i++])!=1)
;//TODO:错误:尚未检索到编号
令牌=strtok(空,“”);
}
您可以从用户输入中读取行,将其标记化,然后使用以下命令直接从标记中检索数字:
//数组大到可以容纳10个数字:
整数[10]={0};
//从用户输入中读取行:
字符输入字符串[200];
fgets(输入字符串,200,标准输入);
//将输入字符串拆分为标记:
char*token=strtok(inputString,“”);
//从每个令牌检索一个数字:
int i=0;
while(令牌!=NULL&&i<10){
如果(sscanf(令牌,“%d”&数字[i++])!=1)
;//TODO:错误:尚未检索到编号
令牌=strtok(空,“”);
}
如果您确定用户总是要输入由空格/制表符和换行符分隔的整数,并且不超过10个,那么您可以使用这一行完成以下操作:
int arr[10];
int count = 0;
while(scanf("%d",&(arr[count++])))
;
它利用了返回匹配项的数量这一事实 如果您确定用户总是要输入由空格/制表符和换行符分隔的整数,并且不超过10个,那么您可以使用这一行来完成以下操作:
int arr[10];
int count = 0;
while(scanf("%d",&(arr[count++])))
;
它利用了返回匹配项的数量这一事实 您可以使用
fgets
读取整行或scanf/fscanf
读取单个数字。您可以使用fgets
读取整行或scanf/fscanf
读取单个数字。或者,如果他是不用担心无效输入。那么,有没有比“读一行”更好的方法呢?我认为这是最好的方法,但我想我可能错了?@user209306 scanf()在给出无效输入时是出了名的糟糕。更简单的是,您可以在循环中使用fget(),将每个字符串转换为整数,并在读取时进行验证,而不是在一行中读取所有数字并对其进行分析。@KingsIndian,scanf(3)
并不是“臭名昭著的坏”,您只需检查有多少输入项匹配(返回值)。@vonbrand它并不是那么简单。如果您在scanf需要int(%d)时输入字符串,那么输入仍然存在于输入中,并且在不清除它的情况下无法继续。或者,如果不担心无效输入,他也可以直接使用scanf
读取标准输入并同时解析。那么,有没有比“读取一行”更好的方法呢?我认为这是最好的方法,但我想我可能错了?@user209306 scanf()在给出无效输入时是出了名的糟糕。更简单的是,您可以在循环中使用fget(),将每个字符串转换为整数,并在读取时进行验证,而不是在一行中读取所有数字并对其进行分析。@KingsIndian,scanf(3)
并不是“臭名昭著的坏”,您只需检查有多少输入项匹配(返回值)。@vonbrand它并不是那么简单。如果您在scanf需要整数(%d)时输入字符串,则输入仍将存在于输入中,并且在未清除该字符串的情况下无法继续。这包括用户在多行中输入10个数字的情况。此外,此scanf
导致仅当输入10个数字或至少输入1个不能作为数字读取的非白色字符序列时,读取才会停止。更安全的方法是使用(count<10)和&scanf(“%d”,&arr[count++])
作为条件。很好,您明确列出了要求,“如果您确定用户总是要输入。不超过10”。我想补充一句,“如果用户决定输入10个以上的数字,您将有一个缓冲区溢出,允许用户执行任意代码。”(基本上,在仔细构造前导后,用户可以输入当函数尝试返回时将执行的机器指令的整数表示。)@vondbrand的安全检查是非常值得的,也是一个很好的习惯。有关更多信息,请参阅此说明,当用户在超过一行的范围内输入10个数字时会出现这种情况。此外,此scanf
导致只有输入10个数字时才会停止读取