我环顾四周但似乎无法找到如何做到这一点。我希望test2(int *f)
的空行值传递给test1()
并打印在屏幕上。
代码的变体1:
#include <stdio.h>
#include <string.h>
void test1();
void test2(int *f);
void test1(){
int a;
test2(&a);
printf("%d \n", a);
}
void test2(int *f){
char str[80];
int lines, i, emptylines=0;
*f=emptylines;
printf("Type a program here. Ctrl+Z and enter to stop.\n");
fflush(stdin);
while(gets(str)!=NULL && strcmp(str, "qq")) {
for(i=0; i<strlen(str); i++){
if(str[i]!='\n') lines=1;
}
if(!lines) emptylines++;
lines=0;
}
}
int main() {
test1();
return 0;
}
代码的变体2:
#include <stdio.h>
#include <string.h>
void test1();
void test2(int *f);
void test1(){
int a;
test2(&a);
printf("%d \n", a);
}
void test2(int *f){
char str[80], *p;
int lines, emptylines=0;
*f=emptylines;
printf("Type a program here. Ctrl+Z and enter to stop.\n");
fflush(stdin);
while(gets(str)!=NULL && strcmp(str, "qq")) {
p=str;
lines=0;
while(*p!='\0') {
if(*p!=' ') {
lines=1;
}
p++;
}
if(lines==0){
emptylines++;
lines=0;
}
}
}
int main() {
test1();
return 0;
}
答案 0 :(得分:4)
您将*f=emptylines
放在函数的开头void test2(int *f);
然后计算emptylines
,但这不会影响f
指向的值。
您需要将该作业*f=emptylines
移至功能的结尾,就在返回之前,在计算emptylines
之后
void test2(int *f){
// stuff to calculate emptylines
....
*f=emptylines; // at the end
}
答案 1 :(得分:3)
写作时
*f = emptylines;
您正在将空行的值复制到f指向的空间中。然后,当您稍后更新空行时,f指向的值不会因为您制作副本而发生更改。
答案 2 :(得分:1)
不要使用其他变量emptylines
,而是直接使用参数f
来计算值。虽然我给它提供了比f
更具描述性的价值,例如numEmptyLines
。
#include <stdio.h>
#include <string.h>
void test1();
void test2(int *numEmptyLines);
void test1(){
int a;
test2(&a);
printf("%d \n", a);
}
void test2(int *numEmptyLines){
char str[80];
int lines, i;
*numEmptyLines = 0;
printf("Type a program here. Ctrl+Z and enter to stop.\n");
fflush(stdin);
while(gets(str)!=NULL && strcmp(str, "qq")) {
for(i=0; i<strlen(str); i++){
if(str[i]!='\n') lines=1;
}
if(!lines) (*numEmptyLines)++;
lines=0;
}
}
int main() {
test1();
return 0;
}