分配无字母矩阵元素的C程序
如果用户在2D数组中输入字母而不是数字,则无法输出无效语句 我尝试使用分配无字母矩阵元素的C程序,c,if-statement,matrix,isalpha,C,If Statement,Matrix,Isalpha,如果用户在2D数组中输入字母而不是数字,则无法输出无效语句 我尝试使用isalpha函数检查输入是数字还是字母,但它给了我一个分段错误。不知道怎么了有什么建议吗 下面的代码只是分配矩阵元素的部分 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define MAX 10 void display(int matrix[][MAX], int size); int main() {
isalpha
函数检查输入是数字还是字母,但它给了我一个分段错误。不知道怎么了有什么建议吗
下面的代码只是分配矩阵元素的部分
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 10
void display(int matrix[][MAX], int size);
int main() {
int n, degree;
int matrix[MAX][MAX];
printf("Enter the size of the matrix: "); // assigning size of the matrix
scanf("%d", &n);
if (n <= 1 || n >= 11) { // can't be bigger than a 10x10 matrix
printf("Invalid input.");
return 0;
}
for (int i = 0; i < n; ++i) { // assigning the elements of matrix
printf("Enter the row %d of the matrix: ", i);
for (int j = 0; j < n; ++j) {
scanf("%d", &matrix[i][j]);
if (!isalpha(matrix[i][j])) { // portion I'm having trouble with
continue;
} else {
printf("Invalid input.");
return 0;
}
}
}
...
#包括
#包括
#包括
#定义最大值10
无效显示(整数矩阵[][MAX],整数大小);
int main(){
int n,学位;
整数矩阵[MAX][MAX];
printf(“输入矩阵的大小:”;//分配矩阵的大小
scanf(“%d”和“&n”);
如果(n=11){//不能大于10x10矩阵
printf(“无效输入”);
返回0;
}
对于(int i=0;i
试试这个:
if (isalpha (matrix[i][j])) {
printf ("Invalid input.");
return 0;
}
试试这个:
if (isalpha (matrix[i][j])) {
printf ("Invalid input.");
return 0;
}
因为n的值是数字,所以我们可以使用字符串而不是int来求解它
char num[10];
int n;
scanf("%s", num);
if(num[0] < '0' || num[0] > '9' || strlen(num) > 2){
printf("invalid\n");
}
if(strlen(num) == 1) n = num[0] - '0';
if(strlen(num) == 2 && num[0] != 1 && num[1] != 0) printf("invalid\n");
else n = 10;
charnum[10];
int n;
scanf(“%s”,num);
如果(num[0]<'0'| | num[0]>'9'| | strlen(num)>2){
printf(“无效\n”);
}
如果(strlen(num)==1)n=num[0]-“0”;
如果(strlen(num)==2&&num[0]!=1&&num[1]!=0)printf(“无效\n”);
否则n=10;
此外,我们还可以使用strtol()函数将输入字符串转换为数字,然后检查其有效性。您可以检查以下代码。我跳过了字符串输入部分。此外,您必须在开始处添加#include
,strtol()函数才能工作
char *check;
long val = strtol (num, &check, 10);
if ((next == num) || (*check != '\0')) {
printf ("invalid\n");
}
if(val > 10 || val < 0) printf("invalid\n");
n = (int)val; //typecasting as strtol return long
char*检查;
long val=strtol(num和check,10);
如果((next==num)| |(*检查!='\0')){
printf(“无效\n”);
}
如果(val>10 | | val<0)printf(“无效\n”);
n=(int)val;//类型转换为strtol返回long
由于n的值是数字,我们可以使用字符串而不是int来求解它
char num[10];
int n;
scanf("%s", num);
if(num[0] < '0' || num[0] > '9' || strlen(num) > 2){
printf("invalid\n");
}
if(strlen(num) == 1) n = num[0] - '0';
if(strlen(num) == 2 && num[0] != 1 && num[1] != 0) printf("invalid\n");
else n = 10;
charnum[10];
int n;
scanf(“%s”,num);
如果(num[0]<'0'| | num[0]>'9'| | strlen(num)>2){
printf(“无效\n”);
}
如果(strlen(num)==1)n=num[0]-“0”;
如果(strlen(num)==2&&num[0]!=1&&num[1]!=0)printf(“无效\n”);
否则n=10;
此外,我们还可以使用strtol()函数将输入字符串转换为数字,然后检查其有效性。您可以检查以下代码。我跳过了字符串输入部分。此外,您必须在开始处添加#include
,strtol()函数才能工作
char *check;
long val = strtol (num, &check, 10);
if ((next == num) || (*check != '\0')) {
printf ("invalid\n");
}
if(val > 10 || val < 0) printf("invalid\n");
n = (int)val; //typecasting as strtol return long
char*检查;
long val=strtol(num和check,10);
如果((next==num)| |(*检查!='\0')){
printf(“无效\n”);
}
如果(val>10 | | val<0)printf(“无效\n”);
n=(int)val;//类型转换为strtol返回long
因此,如果将来有人想知道我做了什么。这是我用来修复if语句的代码。我不希望输入任何大于10000的元素,因此如果输入字母或标点符号,生成的数字将大于此数字。因此if(矩阵[I][j]>10000).这可能不是最好的方法,但它有效且简单
for (int i = 0; i < n; ++i) { // assigning the elements of matrix
printf("Enter the row %d of the matrix: ", i);
for (int j = 0; j < n; ++j) {
scanf("%d", &matrix[i][j]);
if (matrix[i][j] > 10000) { // portion "fixed"
printf("Invlaid input");
return 0;
}
}
}
for(int i=0;i10000){//部分“固定”
printf(“invlaed输入”);
返回0;
}
}
}
我用一个print语句来检查几个字母和字符输入的输出。最低输出大约在30000左右。因此,我认为10000是一个安全的条件。因此,如果将来有人想知道我做了什么。这是我用来修复if语句的代码。我不希望将任何大于10000的元素放入if语句中如果输入字母或标点符号,生成的数字将大于此数字。因此,if(矩阵[i][j]>10000)。可能不是实现这一点的最理想的方法,但它有效且简单
for (int i = 0; i < n; ++i) { // assigning the elements of matrix
printf("Enter the row %d of the matrix: ", i);
for (int j = 0; j < n; ++j) {
scanf("%d", &matrix[i][j]);
if (matrix[i][j] > 10000) { // portion "fixed"
printf("Invlaid input");
return 0;
}
}
}
for(int i=0;i10000){//部分“固定”
printf(“invlaed输入”);
返回0;
}
}
}
我使用打印语句来检查几个字母和字符输入的输出。最低输出大约在30000左右。因此,我认为10000是一个安全的条件。您必须检查
scanf()
:它会告诉您输入是否根据格式字符串正确转换。scanf()
返回成功转换的次数,在您的情况下应为1
。如果用户键入字母,scanf()
将返回0
,目标值将保持未初始化状态。检测此情况并中止或重新启动输入是调用方的责任
下面是代码的修改版本,说明了这两种可能性:
#include <stdio.h>
#define MAX 10
void display(int matrix[][MAX], int size);
int main(void) {
int n, degree;
int matrix[MAX][MAX];
printf("Enter the size of the matrix: "); // assigning size of the matrix
if (scanf("%d", &n) != 1 || n < 2 || n > 10) {
// can't be bigger than a 10x10 matrix nor smaller than 2x2
// aborting on invalid input
printf("Invalid input.");
return 1;
}
for (int i = 0; i < n; i++) { // assigning the elements of matrix
printf("Enter the row %d of the matrix: ", i);
for (int j = 0; j < n; j++) {
if (scanf("%d", &matrix[i][j]) != 1) {
// restarting on invalid input
int c;
while ((c = getchar()) != '\n') {
if (c == EOF) {
printf("unexpected end of file\n");
return 1;
}
}
printf("invalid input, try again.\n");
j--;
}
}
}
...
#包括
#定义最大值10
无效显示(整数矩阵[][MAX],整数大小);
内部主(空){
int n,学位;
整数矩阵[MAX][MAX];
printf(“输入矩阵的大小:”;//分配矩阵的大小
如果(scanf(“%d”,&n)!=1 | n<2 | n>10){
//不能大于10x10矩阵,也不能小于2x2
//正在中止无效输入
printf(“无效输入”);
返回1;
}
对于(int i=0;i