此循环导致程序意外终止。 请帮我确定问题。
char n1, n2;
int wt, edges;
printf("\nEnter the Number of edges in the Network\n");
scanf("%d",&edges);
printf("Enter the details of all the edges of the Network\n");
for(int i=0;i<edges;i++)
{
printf("\nedge - %d : ",i+1);
printf("\n n1 = ");
scanf("%s", &n1);
n1 = toupper(n1);
printf("\n n2 = ");
scanf("%s", &n2);
n2 = toupper(n1);
printf("\n wt = ");
scanf("%d", &wt);
int n11 = n1 - 'A' ;
int n22 = n2 - 'A';
w[n11][n22]=w[n22][n11]=wt;
}
示例输入: n1 = a n2 = b wt = 1
toupper()会将输入更改为大写字母。
答案 0 :(得分:0)
很可能是BLUEPIXY发现的问题。这是错的:
char n1;
scanf("%s", &n1);
一种可能的解决方案:
char n1;
scanf(" %c", &n1);
另一种可能的解决方案,它允许单词之间的任何空格(不仅是单个空格):
char n1;
char tmp[128];
if (scanf("%s", tmp) != 1) abort();
if (strlen(tmp) != 1) abort();
n1 = tmp[0];
答案 1 :(得分:0)
您正在尝试将字符串输入char
变量。即使您输入一个字符,下一个内存位置也会被\0
覆盖。这可能会访问只读存储器并导致突然终止。
取而代之的是:
scanf(" %c", &n1);