Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 迭代直到遇到分数部分为0的值_C_Iteration - Fatal编程技术网

C 迭代直到遇到分数部分为0的值

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

我正在编写一个程序(为了练习和练习),在不使用任何整数计数器变量的情况下,计算数组中的元素数,直到遇到分数部分为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 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
等等……那么你说的分数部分是什么呢?