gpt4 book ai didi

C for 循环迭代

转载 作者:行者123 更新时间:2023-12-02 04:50:57 24 4
gpt4 key购买 nike

我在编写执行以下操作的代码时遇到问题:声明一个 struct{char c;诠释 x; } 数组并通过循环使用 scanf 加载它。加载后,调用函数 f 将用 0 替换结构组件 c 中出现的每个数字,并返回替换数字的总和为零。

代码和输出如下,我有一个问题,函数 f 中的循环似乎迭代了一次,它给出了一些非常奇怪的值。

这是一道考试题,所以我必须使用 printfscanf 等。另外,我将在一个小时内完成考试,因此非常感谢任何快速帮助:)

代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define MAX 2

struct par {
char c;
int x;
};

int f(struct par *niz) {
int i;
int n=0;
for(i=0; i<MAX; i++) {
if(isdigit(niz[i].c)) {
niz[i].c = niz[i].c-'0';
printf("niz[i].c = %d\n i = %d", niz[i].c, i);
n=n+niz[i].c;
niz[i].c='0';
}
}

return n;
}

void main() {
int n;
int i;

struct par niz[MAX];

printf("enter\n");

for(i=0; i<MAX; i++) {
scanf("%c", &niz[i].c);
scanf("%d", &niz[i].x);
}

n=f(niz);

for(int i=0; i<MAX; i++) {
printf("%d\n", niz[i].c);
printf("%d\n", niz[i].x);
}
printf("n = %d\n", n);
}

输出:

enter
2
2
2
niz[i].c = 2
i = 048
2
10
2
n = 2

最佳答案

当您在第一次输入后按回车键时,换行符不会被 scanf 扫描,而是留在输入缓冲区中。当您随后尝试读取数字时,scanf 看到的是换行符而不是数字,因此不会扫描任何内容。

解决这个问题的简单方法是在格式前添加一个前导空格:

scanf(" %c", &niz[i].c);
scanf(" %d", &niz[i].x);
/* ^ */

这告诉 scanf 跳过空格。

关于C for 循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18870176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com