gpt4 book ai didi

c++ - C/C++ 多个 scanf 在一个函数中

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:18 25 4
gpt4 key购买 nike

如何创建一个从控制台读取一些值然后返回它们的函数?我的意思是不是单个 scanf,多个 scanf 在另一个函数中然后返回值。

例如:

int main(){
write();
}

int write(void){
int a,b;
printf("Enter an int");
scanf("%d",&a);
printf("Enter another int");
scanf("%d",&b)
return a,b;
}

我知道 C 不是 C++;我只想要一个 C++ 的例子。这是我制作的完整程序。我问这个问题是因为我想优化我的代码。上面的功能我在我的程序中实现了,但是我没有想出让它起作用,只能用指针。

#include <stdio.h>
#include <stdlib.h>
#define MAX 32

void read(int*x,int*y);

void write(int m[][MAX],int x,int y);

void display(int sir[][MAX],int x,int y);

int main(){
int x,y,m,n,a,b,i,k;
int matrice1[MAX][MAX]={0},matrice2[MAX][MAX]={0},result[MAX][MAX]={0},result2[MAX][MAX]={0};
read(&x,&y); //this is what i want to not use direct addreses if is possible
write(matrice1,x,y);
m=x;
n=y;
read(&x,&y);
write(matrice2,x,y);
system("cls");
printf("Prima matrice: \n");
for(i=0;i<m;i++){
for(k=0;k<n;k++){
printf(" %d",matrice1[i][k]);
}
printf("\n");
}
display(matrice1,m,n);
printf("\nA doua matrice: \n");
for(i=0;i<x;i++){
for(k=0;k<y;k++){
printf(" %d",matrice2[i][k]);
}
printf("\n");
}
display(matrice2,x,y);
printf("\nSuma matricelor: \n");
if(x>m){
a=x;
}
else
a=m;
if(y>n){
b=y;
}
else
b=n;
for(i=0;i<a;i++){
for(k=0;k<b;k++){
result[i][k]=matrice1[i][k]+matrice2[i][k];
printf(" %d",result[i][k]);
if(matrice1[i][k]%2!=0 && matrice2[i][k]%2!=0){
result2[i][k]=matrice1[i][k]+matrice2[i][k];
}
}
printf("\n");
}
printf("\nSuma matricelor impare<doar daca ambele sunt impare>: \n");
for(i=0;i<a;i++){
for(k=0;k<b;k++){
printf(" %d",result2[i][k]);
}
printf("\n");
}
return 0;
}

void write(int m[][MAX],int x,int y){
int i,k;
for(i=0;i<x;i++){
for(k=0;k<y;k++){
printf("elementul de pe linia %d, coloana %d: ",i,k);
scanf("%d",&m[i][k]);
}
}
}

void read(int*x,int*y){
printf("\nIntroduceti numarul de randuri a matricei: ");
scanf("%d",x);
printf("Introduceti numarul de coloane a matricei: ");
scanf("%d",y);
printf("\nIntroduceti elementele matricei.\n");
}

void display(int sir[][MAX],int x,int y){
int i,k;
for(i=0;i<x;i++){
for(k=0;k<y;k++){
if(sir[i][k]%2==0)
printf("numar par, pozitia %d,%d: %d\n",i,k,sir[i][k]);
}
}
}

最佳答案

请注意,C 和 C++ 是不同的语言,因此代码也会有所不同。

对于 C,我建议采用以下方法:

int readInts(int intArr[], size_t maxInts)
{
int i = 0;
while (i < maxInts && scanf("%d", &intArr[i]) == 1) { i++; }
return i;
}

这样调用它:

int myInts[100];
numInts = readInts(myInts, sizeof(myInts) / sizeof(myInts[0]);


在 C++ 中,应该尽可能避免手动内存管理,因此我会这样做:

std::vector<int> readInts()
{
int x;
std::vector<int> result;
while (std::cin >> x)
{
result.push_back(x);
}

return result;
}

关于c++ - C/C++ 多个 scanf 在一个函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068170/

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