这里我想使用2D数组将一些学生名称转换为大写。这编译没有错误,但在执行时它会产生一个称为“分段错误”的错误。我尝试使用一维数组,但它只打印我输入的姓氏。最后,我想分别计算输入名称的总整数值。我是C语言的新手,所以可能会有很多错误。有什么想法来修复我的代码?
#include<stdio.h>
#define SIZE 6
void input(char arr[][10], int size);
void upper(char arr[][10], int size);
void findIntValue(char arr[][10], int size);
int main(void)
{
char arr[SIZE][10] = {0.0};
input(arr, SIZE);
upper(arr, SIZE);
findIntValue(arr, SIZE);
return 0;
}
void input(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size ; i++)
{
printf("\nEnter the name: ");
scanf(" %s", arr[i]);
}
}
void upper(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
printf("\n%s\n", arr);
}
}
}
void findIntValue(char arr[][10], int size)
{
int i, j;
int total = 0;
for(i = 0 ; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
total += arr[i][j];
printf("\n%s\t%d\n", arr, total);
total = 0;
}
}
}
答案 0 :(得分:0)
你正在以错误的方式使用2-d。您需要在arr[i]
中提供scanf()
。因为您的数组是一个二维数组,其中arr[i]
能够存储字符串。所以你的输入fn将包含这个语句。输出函数scanf("%s",arr[i])
相同。
希望这会有所帮助:)
答案 1 :(得分:0)
您的代码中存在许多问题。
问题-1:在函数输入中,需要将arr [i]作为输入传递给scanf
问题-2:在上层函数中,在第一个循环中,您试图读取未初始化的j值,这可能导致未定义的行为。
问题-3:在上部函数中,在第二个循环中,在printf中你再次使用arr,而你应该使用arr [i]而且,你不需要两个循环来打印。一个循环就足够了。
问题-4:findIntValue的循环和打印逻辑错误。在内循环完成后,您需要打印total和arr。此外,打印值应为arr [i]而不是arr。
请在下面找到更正的程序:
#include<stdio.h>
#define SIZE 6
void input(char arr[][10], int size);
void upper(char arr[][10], int size);
void findIntValue(char arr[][10], int size);
int main(void)
{
char arr[SIZE][10] = {0.0};
input(arr, SIZE);
upper(arr, SIZE);
findIntValue(arr, SIZE);
return 0;
}
void input(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size ; i++)
{
printf("\nEnter the name: ");
scanf(" %s", arr[i]);
}
}
void upper(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size && arr[i][0] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i][0] != '\0' ; i++)
{
printf("\n%s\n", arr[i]);
}
}
void findIntValue(char arr[][10], int size)
{
int i, j;
int total = 0;
for(i = 0 ; i < size && arr[i][0] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
total += arr[i][j];
}
printf("\n%s\t%d\n", arr[i], total);
total = 0;
}
}