C 迭代直到遇到分数部分为0的值
我正在编写一个程序(为了练习和练习),在不使用任何整数计数器变量的情况下,计算数组中的元素数,直到遇到分数部分为0的值。 我在下面使用了整数计数器(顺便说一句,它是‘I’),但是我想不出一个不在循环中使用‘I’的方法。没有整数计数器我怎么做 输入:C 迭代直到遇到分数部分为0的值,c,iteration,C,Iteration,我正在编写一个程序(为了练习和练习),在不使用任何整数计数器变量的情况下,计算数组中的元素数,直到遇到分数部分为0的值。 我在下面使用了整数计数器(顺便说一句,它是‘I’),但是我想不出一个不在循环中使用‘I’的方法。没有整数计数器我怎么做 输入: 5 1.2 -3.4 5.00 4 5.45 输出: 在第一个整数之前:2个元素 void int_or_float(float arr[], int n){ int i, j; int counter = 0; char
5
1.2
-3.4
5.00
4
5.45
输出:
在第一个整数之前:2个元素
void int_or_float(float arr[], int n){
int i, j;
int counter = 0;
char str[10];
for (i = 0; i < n; i++){
printf("%f\n", arr[i]);
sprintf(str, "%f", arr[i]);
for (j = 0; j < 9; j++){
printf("%c\n", str[j]);
if (str[j] == '.' && str[j + 1] == '0'){
printf("Aborted!");
printf("\n\nBefore the first integer: %d elements", i);
j = 11;
i = n + 1;
}
}
}
}
int main(){
int n, i;
float *things;
scanf("%d", &n);
things = malloc (n * sizeof(float));
for (i = 0; i < n; i++){
scanf("%f", &things[i]);
}
printf("\n");
int_or_float(things, n);
return 0;
}
void int_或_float(float arr[],int n){
int i,j;
int计数器=0;
char-str[10];
对于(i=0;i
你不能用这个吗
for(i=0; i<n; i++)
{
if(round(arr[i])==arr[i])
{
printf("Before the first integer: %d elements\n", i);
return;
}
}
for(i=0;i我真的不认为这样做有什么意义,但是如果没有i:
void int_or_float(const float *arr, int n){
int j;
float counter = 0.0f;
char str[10];
while(n-- >0){
printf("%f\n", *arr);
sprintf(str, "%f", *arr++);
for (j = 0; j < 9; j++){
printf("%c\n", str[j]);
if (str[j] == '.' && str[j + 1] == '0'){
printf("Aborted!");
printf("\n\nBefore the first integer: %f elements\n", counter);
j = 11;
n=0;
}
}
counter = counter+1.0f;
}
}
无效整数或浮点(常量浮点*arr,整数n){
int j;
浮动计数器=0.0f;
char-str[10];
而(n-->0){
printf(“%f\n”,*arr);
sprintf(str、%f、*arr++);
对于(j=0;j<9;j++){
printf(“%c\n”,str[j]);
如果(str[j]=='0'.&&str[j+1]=='0'){
printf(“中止!”);
printf(“\n\n在第一个整数之前:%f个元素\n”,计数器);
j=11;
n=0;
}
}
计数器=计数器+1.0f;
}
}
OP确实需要一个解决方案而不使用任何整数计数器变量。如果不使用计数器,您如何计算任何东西?通过使用指针在数组中前进,但这只在包含哨兵以便可以终止时起作用。假设此哨兵是负数
在main())
中,哨兵需要一个额外的元素
然后,在int\u或\u float()
中,可以使用指针单步遍历数组
#include <stdio.h>
#include <stdlib.h>
void int_or_float(float arr[]) { // removed int n
float *ptr = arr;
int ival;
while (*ptr >= 0) {
printf("%f\n", *ptr);
ival = (int)*ptr;
if (*ptr == (float)ival) {
printf("Aborted!");
printf("\n\nBefore the first integer: %d elements", ptr - arr);
return;
}
ptr++;
}
printf("\n\nNo integer values found");
}
int main() {
int n, i;
float *things;
scanf("%d", &n);
things = malloc ((n+1) * sizeof(float)); // extra for sentinel
for (i = 0; i < n; i++){
scanf("%f", &things[i]);
}
things[i] = -1; // sentinel
printf("\n");
int_or_float(things); // n removed
free (things); // remember to free memory
return 0;
}
#包括
#包括
void int_或_float(float arr[]){//removed int n
浮动*ptr=arr;
国际竞争力;
而(*ptr>=0){
printf(“%f\n”,*ptr);
ival=(int)*ptr;
if(*ptr==(浮动)ival){
printf(“中止!”);
printf(“\n\n在第一个整数之前:%d个元素”,ptr-arr);
返回;
}
ptr++;
}
printf(“\n\n未找到整数值”);
}
int main(){
int n,i;
漂浮物;
scanf(“%d”和“&n”);
things=malloc((n+1)*sizeof(float));//哨兵额外
对于(i=0;i
必须指出的是,并非所有整数都可以用浮点表示
您还应该检查malloc()
和scanf()
的返回值,从技术上讲,它们不是i
和j
的“整数计数器值”吗?更严格地说,5
与5.00
相同,因为您强制所有内容都是浮动的。5用于分配内存,它不是数组的一个元素。为什么您不想使用i
。我认为使用它很好……对于“5.01”会发生什么?当您将其扫描为%f
并执行fscanf时也会发生这种情况(str,
%f,arr[i])
所有的值都是5.000000
等等……那么你说的分数部分是什么呢?