c中的值没有初始化成变量
Value is not initialized into the variable in c
这是我制作的程序:
#include <stdio.h>
int main(void)
{
//Put variables here
int space = 0;
int num_of_rows = 0;
int p = 1;
int t = 0;
char alphabet[100] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
get_and_validate_user_input(num_of_rows);
printf(" The number of rows are : %d", num_of_rows);
}
void get_and_validate_user_input(int num_of_rows)
{
//Input validation
while (1)
{
printf("Enter the number of rows : ");
//Getting the input from the user
scanf("%d", &num_of_rows);
if (num_of_rows <= 0)
{
printf("Negative numbers are not allowed here \n");
}
else
{
break;
}
}
}
预期输入:
输入行数:5
预期输出:
行数为:5
但是从我的代码输出显示错误。它显示:行数为:0
现在我的问题是:我的程序出了什么问题?我该如何解决这个问题?
你的问题是get_and_validate_user_input修改了local变量num_of_rows => main
中的值保持为 0
如果你想从 get_and_validate_user_input 中修改 num_of_rows,请按地址而不是按值,示例(未使用的变量已注释,修改 get_and_validate_user_input 中的检查以与消息兼容):
#include <stdio.h>
#include <stdlib.h>
void get_and_validate_user_input(int * num_of_rows);
int
main(void){
//Put variables here
//int space=0;
int num_of_rows=0;
//int p=1;
//int t=0;
//char alphabet[100]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
get_and_validate_user_input(&num_of_rows);
printf(" The number of rows is : %d\n",num_of_rows);
return 0;
}
void get_and_validate_user_input(int * num_of_rows){
//Input validation
while(1){
printf("Enter the number of rows : ");
//Getting the input from the user
if (scanf("%d",num_of_rows) != 1) {
int c;
puts("Invalid input");
// invalid input, bypass all the line
while ((c = getchar()) != '\n') {
if (c == EOF) {
puts("EOF, abort");
exit(-1);
}
}
}
else if(*num_of_rows < 0){ // 0 seems allowed, else update message
printf("Negative numbers are not allowed here \n");
}
else {
break;
}
}
}
编译与执行:
/tmp % gcc -Wall c.c
/tmp % ./a.out
Enter the number of rows : 12
The number of rows is : 12
/tmp % ./a.out
Enter the number of rows : aze
Invalid input
Enter the number of rows : -2
Negative numbers are not allowed here
Enter the number of rows : 12
The number of rows is : 12
/tmp %
编译器看不到调用点
get_and_validate_user_input(num_of_rows);
如何声明函数 get_and_validate_user_input
。所以编译器发出一条消息。它期望该函数默认具有 return 类型 int
但是当它遇到函数定义时它会看到 return 类型是 void
.
将函数声明放在 main 之前。
传递参数的值没有在函数中使用
void get_and_validate_user_input(int num_of_rows){
//...
//Getting the input from the user
scanf("%d",&num_of_rows);
//...
函数参数num_of_rows是函数的局部变量,由传入参数的值初始化。所以改变局部变量不会影响原来的参数。
您可以像
这样声明和定义函数
int get_and_validate_user_input( void )
{
int num_of_rows = 0;
//Input validation
while (1)
{
printf("Enter the number of rows : ");
//Getting the input from the user
scanf("%d", &num_of_rows);
if (num_of_rows <= 0)
{
printf("Negative numbers are not allowed here \n");
}
else
{
break;
}
}
return num_of_rows;
}
并像
一样在main中调用它
num_of_rows = get_and_validate_user_input();
这是我制作的程序:
#include <stdio.h>
int main(void)
{
//Put variables here
int space = 0;
int num_of_rows = 0;
int p = 1;
int t = 0;
char alphabet[100] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
get_and_validate_user_input(num_of_rows);
printf(" The number of rows are : %d", num_of_rows);
}
void get_and_validate_user_input(int num_of_rows)
{
//Input validation
while (1)
{
printf("Enter the number of rows : ");
//Getting the input from the user
scanf("%d", &num_of_rows);
if (num_of_rows <= 0)
{
printf("Negative numbers are not allowed here \n");
}
else
{
break;
}
}
}
预期输入: 输入行数:5
预期输出: 行数为:5
但是从我的代码输出显示错误。它显示:行数为:0
现在我的问题是:我的程序出了什么问题?我该如何解决这个问题?
你的问题是get_and_validate_user_input修改了local变量num_of_rows => main
中的值保持为 0如果你想从 get_and_validate_user_input 中修改 num_of_rows,请按地址而不是按值,示例(未使用的变量已注释,修改 get_and_validate_user_input 中的检查以与消息兼容):
#include <stdio.h>
#include <stdlib.h>
void get_and_validate_user_input(int * num_of_rows);
int
main(void){
//Put variables here
//int space=0;
int num_of_rows=0;
//int p=1;
//int t=0;
//char alphabet[100]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
get_and_validate_user_input(&num_of_rows);
printf(" The number of rows is : %d\n",num_of_rows);
return 0;
}
void get_and_validate_user_input(int * num_of_rows){
//Input validation
while(1){
printf("Enter the number of rows : ");
//Getting the input from the user
if (scanf("%d",num_of_rows) != 1) {
int c;
puts("Invalid input");
// invalid input, bypass all the line
while ((c = getchar()) != '\n') {
if (c == EOF) {
puts("EOF, abort");
exit(-1);
}
}
}
else if(*num_of_rows < 0){ // 0 seems allowed, else update message
printf("Negative numbers are not allowed here \n");
}
else {
break;
}
}
}
编译与执行:
/tmp % gcc -Wall c.c
/tmp % ./a.out
Enter the number of rows : 12
The number of rows is : 12
/tmp % ./a.out
Enter the number of rows : aze
Invalid input
Enter the number of rows : -2
Negative numbers are not allowed here
Enter the number of rows : 12
The number of rows is : 12
/tmp %
编译器看不到调用点
get_and_validate_user_input(num_of_rows);
如何声明函数 get_and_validate_user_input
。所以编译器发出一条消息。它期望该函数默认具有 return 类型 int
但是当它遇到函数定义时它会看到 return 类型是 void
.
将函数声明放在 main 之前。
传递参数的值没有在函数中使用
void get_and_validate_user_input(int num_of_rows){
//...
//Getting the input from the user
scanf("%d",&num_of_rows);
//...
函数参数num_of_rows是函数的局部变量,由传入参数的值初始化。所以改变局部变量不会影响原来的参数。
您可以像
这样声明和定义函数int get_and_validate_user_input( void )
{
int num_of_rows = 0;
//Input validation
while (1)
{
printf("Enter the number of rows : ");
//Getting the input from the user
scanf("%d", &num_of_rows);
if (num_of_rows <= 0)
{
printf("Negative numbers are not allowed here \n");
}
else
{
break;
}
}
return num_of_rows;
}
并像
一样在main中调用它num_of_rows = get_and_validate_user_input();